QNetworkInterface 类

QNetworkInterface 是一个管理网络连接的类,利用他可以枚举本机的网络连接并获取其属性。比较常用的函数有: QList<QNetworkAddressEntry> QNetworkInterface::addressEntries() 获取地址列表,应用如下: //原型 QList<QNetworkAddressEntry> QNetworkInterface::addressEntries () const //比如获取本地所有 ip 和 netmask //allInterfaces() 是一个静态函数,用于获取本机所以连接。 QList<QNetworkInterface> networkInterface = QNetworkInterface::allInterfaces(); for (QList<QNetworkInterface>::const_iterator i = networkInterface.const_Begin(); i != networkInterface.const_End(); ++i) { //获取连接地址列表 QList<QNetworkAddressEntry> addressEntriesList = (*i).addressEntries(); for (QList<QNetworkAddressEntry>::const_iterator j = addressEntriesList.constBegin(); j != addressEntriesList.constEnd(); ++j) { //输出 ip qDebug() << (*i).ip().toString(); //输出 netmask qDebug() << (*i).ip().toString();
more…

QWizard下一步按钮的控制

QWizard是Qt的向导类,在向导过程中,可以通过函数registerField注册字段实现全局访问,而且可以通过4种方法来控制下一步或者完成按钮的可用性: 第一种方法,isComplete函数,其应用于QWizardPage,可控制单个向导页面的“下一步”或者“完成”按钮的可用性,函数如下: bool QWizardPage::isComplete () const[virtual] 下面是isComplete的实现,源码来源于 http://doc.qt.nokia.com/qq/qq22-qwizard.html#validatebeforeitstoolate 首先重新实现QWizardPage::isComplete()函数 bool SailingPage::isComplete() const { return field("sailing").toDate().dayOfWeek() != Qt::Sunday; } 连接输入框或者其他需要监视的对象的信号与QWizardPage::completeChanged ()信号。 connect(sailing, SIGNAL(selectionChanged()), this, SIGNAL(completeChanged())); 当然也可以自己执行QWizardPage::completeChanged ()信号,即自行编写完成检查函数后执行信号: emit completeChanged() 第二种方法,hasAcceptableInput函数,用于QLineEdit,如果hasAcceptableInput为false,则按钮会变灰。 bool hasAcceptableInput () const 第三种方法,registerField函数,第一个参数name后加星号,例如field*,就可以保证如果此区域不填写,下一步按钮将始处于灰色状态。 void QWizardPage::registerField ( const QString & name, QWidget * widget, const char * property = 0, const char * changedSignal =
more…

Qt中addStretch的有趣应用

今天在使用addStretch,布局的时候,发现addStretch竟然是可以平均分配的,有意思。比如: QVBoxLayout *buttonLayout = new QVBoxLayout; buttonLayout->addStretch(1); buttonLayout->addWidget(Button1); buttonLayout->addStretch(1); buttonLayout->addWidget(Button2); buttonLayout->addStretch(1); buttonLayout->addWidget(Button3); buttonLayout->addStretch(6); 您会发现,buttonLayout的布局将空白没有widget的地方分成了9份,然后按照您所规定的地方分配弹簧,于是布局起来就方便多了,以前没有发现这个,一直还为布局头疼呢,现在有点门路了。

QTableWidgetItem中checkBox的判断问题

在QTableWidget中会经常用的checkBox,但是如何判断复选框是否被选中呢,方法是利用QTableWidget::cellChanged()函数,检查单元格内容的变化,然后连接此信号,在槽函数中检测checkBox的状态,代码如下: QTableWidget *tableWidget = new QTableWidget; QTableWidgetItem *firstColumn = new QTableWidgetItem(tr("test")); firstColumn->setCheckState(Qt::Checked);//加入复选框 connect(tableWidget, SIGNAL(cellChanged(int,int)), this, SLOT(changeTest(int, int))); void changeTest(int row, int col) { if(tableWidget ->item(row, col)->checkState() == Qt::Checked) … else … } 如果需要的话,可以通过判断信号发出者防止死循环。

QTableWidget排序问题

QTableWidget在启用排序的时候会自动调用sortByColumn() 函数进行排序,因此无须再次调用。启用排序函数为setSortingEnabled(bool enable),默认为false,启用代码如下: tableWidget->setSortingEnabled(true);

Copyright © 2012 勿慢牛 - All Rights Reserved. - Admin - Powered by WordPress