承上启下
Containes — (Group Box、Scroll Area、Tab Widget、Stacket Widget、Dock Widget)
QListWidget (列表控件)
QTableWidget (表格控件)
QTreeWidget(树形控件)
理解Qt Ui设计框架
Qt事件循环
- 界面停留2秒后自动消失
QApplication a(argc, argv);
MainWindow w;3 w.show();
Sleep(2000); //need #include <Windows.h>
//return a.exec();
class Q_GUI_EXPORT QApplication : public QCoreApplication.
class Q_CORE_EXPORT QCoreApplication : public QObject
class Q_CORE_EXPORT QObject
- 程序入口argc argv
/**
* @brief qMain 程序入口
* @param argc 命令行变量的数量
* @param argv 命令行变量的数组 (鼠标键盘命令)
* @return
*/
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
qDebug() << "argc " << argc;
for (int i = 0; i < argc; i++ )
{
qDebug() << argv[i];
}
return a.exec();
}
- UI文件
ui->setupUi(this);
- 从Qt设计器中窥视Qt的继承关系
添加progressBar到stateBar
观察QtCreator发现状态栏中有个进度条
- showMessage
ui -> statusBar -> showMessage("message", 2000);
ui -> statusBar -> showMessage("message2");
- addPermanentWidget
QProgressBar *pStateProgressBar = new QProgressBar(this);
ui->statusBar->addPermanentWidget(pStateProgressBar);
pStateProgressBar->setValue(55);
pStateProgressBar->setAlignment(Qt::AlignCenter);
//如果不记得怎么使用可以借助ui->setupUi(this);
Containers
groupBox
QGroupBox为构建分组提供了支持,通常包含一个边框和一个标题栏,作为容器部件来使用,在其中可以布置各种窗口部件。
scrollArea
QScrollArea提供了一个滚动视图到另外一个部件,滚动区域用于显示一个画面的子部件的内容。如果部件超过画面的大小,视图可以提供滚动条,这样就都可以看到部件的整个区域。
- UI属性设置
- 添加一个带图片的lable
QLabel *pImageLable = new QLabel(this);
pImageLable->setPixmap(QPixmap(":/png/3.jpg"));
ui->scrollArea->setWidget(pImageLable);
ToolBox
QToolBox类提供了一个选项卡式的条目。QToolBox可以在一个tab列上显示多个Item ,并且当前的item显示在当前的tab下面。每个tab都在tab列中有一个索引位置。tab的item是一个QWidget ,例如QQ的联系人就是QToolBox
- ui属性
- 添加item
tabWidget
QTabWidget类提供了一系列的Tab选项卡的切换,每个选项卡下有自己的控件;原理和toolBox一样
WPS上方一排就是TabWidget
- ui属性
stackedWidget
QStackedWidget理解为层叠窗口(堆栈窗口),提供了多页面切换的布局,每个选项卡下有自己的控件, QStackedWidget类提供了多页面切换的布局,一次只能看到一个界面。
还是以WPS为例
在QtCreator中:
- Demo:实现页面切换
// 使用pushButton来触发页面的切换
void Widget::on_pushButton_clicked()
{
ui->stackedWidget->setCurrentIndex(0);
}
void Widget::on_pushButton_2_clicked()
{
ui->stackedWidget->setCurrentIndex(1);
}
void Widget::on_pushButton_3_clicked()
{
ui->stackedWidget->setCurrentIndex(2);
}
qFrame
QFrame类是带有边框的部件的基类。它的子类有我们最为常用的标签部件QLabel,另外还有QLCDNumber、QSplitter、QStackedWidget、QToolBox和QAbstractScrollArea类。
带边框部件最主要的特点就是可以有一个明显的边界框架。QFrame类的主要功能也就是用来实现不同的边框效果,这主要是由边框形状(Shape)和边框阴影(Shadow)组合来形成的
qWidget
QWidget类是所有用户界面对象的基类,被称为基础窗口部件,它可以作为其他部件的容器。
QWidget继承自QObject类和QPaintDevice类,其中QObject类是所有支持Qt对象模型(Qt Object Model)的Qt对象的的基类,QPaintDevice类是所有可以绘制的对象的基类。
mdiArea
QMdiArea一般使用与主窗口中,用于容纳多个子窗口
- 添加子窗口
DockWidget
QDockWidget类:理解为悬浮(停靠)窗口,提供了一个特殊的窗口部件,它可以是被锁在QMainWindow窗口内部或者是作为顶级窗口悬浮在桌面上。
只能使用在MinWindow类才有
Qt官方有个很好的Demo
axWidget
Qt的windows商业版本提供了ActiveQt这个framework,使用这个组件我们可以在Qt中使用ActiveX控件,并且也开发基于Qt的ActiveX控件。
QAxContainer不包含在QtCore里面,所以要使用QAxContainer的话还必须要在.pro文件中添加 CONFIG+=qaxcontainer
不能跨平台,谨慎使用!
ItemWidget
ListWidget
QListWidget类列表框控件用来加载并显示多个列表项。QListWidgetItem类就是列表项类。
- ui属性
- ui添加item方法,双击可以进入编辑item界面
- 可以单独控制某一个item的属性
重点属性:能不能被编辑 flags-> Editable - 代码添加item方法:
ui -> listWidget -> addItem("item1");
TreeWidget
tabWidget
##标准对话框
标准消息对话框
- 标准警告对话框
1 void Widget::on_pushButtonCirticalMessage_clicked()
{
QMessageBox::StandardButton reply;
reply = QMessageBox::critical(this, QString::fromLocal8Bit("标准警告对话框"),
QString::fromLocal8Bit("这里填写需要警 告的内容"),
QMessageBox::Abort | QMessageBox::Retry | QMessageBox::Ignore);
//使用reply 接住用户的选择
if (reply == QMessageBox::Abort)
ui‐>lineEditCritical‐>setText(tr("Abort"));
else if (reply == QMessageBox::Retry)
ui‐>lineEditCritical‐>setText(tr("Retry"));
else
ui‐>lineEditCritical‐>setText(tr("Ignore"));
}
- 自定义标准警告对话框
void Widget::on_pushButtonCustomMsg_clicked()
{
QMessageBox msgBox;
msgBox.setText(QString::fromLocal8Bit("是否保持文件?"));
msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No
| QMessageBox::Cancel);
msgBox.setButtonText(QMessageBox::Yes, QString::fromLocal8Bit("是"));
msgBox.setButtonText(QMessageBox::No, QString::fromLocal8Bit("否"));
msgBox.setButtonText(QMessageBox::Cancel, QString::fromLocal8Bit("取消"));
int ret = msgBox.exec();
switch (ret)
{
case QMessageBox::Yes:
ui->lineEditCustomMsg->setText("Yes");
break;
case QMessageBox::No:
ui->lineEditCustomMsg->setText("No");
break;
case QMessageBox::Cancel:
ui->lineEditCustomMsg->setText("Cancel");
break;
default:
break;
}
}
标准文件对话框
QFileDialog:
标准颜色对话框
QColorDialog:
标准字体对话框
QFontDialog:
标准输入对话框
QInputDialog: