目录
widget:用户界面最基本的组成部分,它接收来自于windows系统的鼠标、键盘以及其他事件,然后将它自己绘制在屏幕上。
分类:
1.顶级widget:没有父类的独立窗口。
2.子widget:作为子部件在父类中显示。
3.复合型Widget:把一个widget作为一个容器来存放一组子widget。
main.cpp
#include int main(int argc, char *argv[]) { QApplication a(argc, argv); // 新建QWidget类对象,默认parent参数是nullptr,所以它是个窗口 QWidget *widget = new QWidget(); // 设置窗口标题 widget->setWindowTitle(QObject::tr("我是widget")); // 新建QLabel对象,默认parent参数是nullptr,所以它是个窗口 QLabel *label = new QLabel(); label->setWindowTitle(QObject::tr("我是label")); // 设置要显示的信息 label->setText(QObject::tr("label:我是个窗口")); // 改变部件大小,以便能显示出完整的内容 label->resize(220, 20); // label2指定了父窗口为widget,所以不是窗口,只是widget窗口的子部件 QLabel *label2 = new QLabel(widget); label2->setText(QObject::tr("label2:我不是独立窗口,只是widget的子部件")); label2->resize(250, 20); // 在屏幕上显示出来 label->show(); widget->show(); int ret = a.exec(); delete label; delete widget; return ret; }
.pro
QT+=widgets SOURCES += \ main.cpp
模块对话框:
在其没有被关闭之前,用户不能与同一个应用程序的其他窗口进行交互,直到该对话框关闭。
//非模态对话框: //对话框弹出来,但mywidget窗口并没有出来 #include"ui_widget.h" #include#include "widget.h" Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget) { ui->setupUi(this); //QDialog *dialog=new QDialog(this); //dialog->show(); //或者 QDialog dialog(this); //定义QDialog对象 dialog.exec(); } Widget::~Widget() { delete ui; }
非模块对话框:
对于非模态对话框,当被打开时,用户既可选择和该对话框进行交互,也可以选择同应用程序的其他窗口交互。
//模式对话框 //对话框与widget一起出来 #include "widget.h" #include#include"ui_widget.h" Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget) { ui->setupUi(this); QDialog *dialog=new QDialog(this); dialog->setModal(true);//表示是模式对话框 dialog->show(); } Widget::~Widget() { delete ui; }
信号和槽都是函数,用于完成对象间的协同操作。
步骤
1.在widget.h的MyWidget类定义中添加槽的声明。
public slots: //槽一般用关键词slots修饰
void showChildDialog(); 2.在widget.cpp中定义槽函数的功能。
void MyWidget::showChildDialog()
{
QDialog *dialog=new QDialog(this);
dialog->show();
} 3.在MyWidget类构造函数中,加入connect()函数将单击信号与槽关联。
即受到指定信号后执行槽函数。
MyWidget::MyWidget(QWidget*parent):
QWidget(parent),
ui(new Ui::MyWidget)
{
ui->setupUi(this);
connect(ui->showChildButton,&QPushButton::clicked,
this,&MyWidget::showChildDialog);
} #include "dialog.h"
#include "./ui_dialog.h"
Dialog::Dialog(QWidget *parent)
: QDialog(parent)
, ui(new Ui::Dialog)
{
ui->setupUi(this);
}
Dialog::~Dialog()
{
delete ui;
}
void Dialog::on_pushButton_clicked()
{
//accept是QDialog中的一个槽
//功能:1.执行这个槽后隐藏这个模式对话框;2.返回QDialog::Accepted值
accept();
}
void Dialog::on_pushButton_2_clicked()
{
//reject与accept对应
//返回一个QDialog::Rejected值
reject();
}
#ifndef DIALOG_H #define DIALOG_H #include QT_BEGIN_NAMESPACE namespace Ui { class Dialog; } QT_END_NAMESPACE class Dialog : public QDialog { Q_OBJECT public: Dialog(QWidget *parent = nullptr); ~Dialog(); private slots: void on_pushButton_2_clicked(); void on_pushButton_clicked(); private: Ui::Dialog *ui; }; #endif // DIALOG_H
#include "dialog.h" #include"QWidget" #include int main(int argc, char *argv[]) { QApplication a(argc, argv); Dialog dialog; //新建类对象 if(dialog.exec()==QDialog::Accepted) //判断dialog执行结果 { QWidget w; w.show(); //如果按下进入主界面按钮,则进入主界面 return a.exec(); //程序正常运行 } else { return 0; //退出程序 } }
//颜色对话框
void Widget::on_pushButton_clicked()
{
QColor color=QColorDialog::getColor(Qt::red,this,tr("颜色对话框"));
qDebug()<<"color:"<
b.文件对话框
//文件对话框
void Widget::on_pushButton_2_clicked()
{
// //读取单个文件
// QString filename=QFileDialog::getOpenFileName(this,tr("文件对话框"),
// "D:\photo",tr("图片文件(*.jpg *.png)"));
// qDebug()<<"fileName:"<
c.字体对话框
//字体对话框
void Widget::on_pushButton_3_clicked()
{
bool ok;//是否按下ok
QFont font=QFontDialog::getFont(&ok,this);
//如果按下ok,字体对话框按钮使用新字体
//如果按下cancel,则输出信息
if(ok)
{
ui->pushButton_3->setFont(font);
}
else
{
qDebug()<
d.输入对话框
//输入对话框
void Widget::on_pushButton_4_clicked()
{
bool ok;
//获取字符串
QString string=QInputDialog::getText(this,tr("输入字符串对话框"),
tr("请输入用户名:"),QLineEdit::Normal,tr("admin"),&ok);
if(ok)
{
qDebug()<<"string:"<
e.消息对话框
//消息对话框
void Widget::on_pushButton_5_clicked()
{
//问题对话框
int ret1=QMessageBox::question(this,tr("问题对话框"),
tr("你了解Qt吗?"),QMessageBox::Yes,QMessageBox::No);
if(ret1==QMessageBox::Yes)
{
qDebug()<
f.进度对话框
//进度对话框
void Widget::on_pushButton_6_clicked()
{
QProgressDialog dialog(tr("文件复制进度"),tr("取消"),0,50000,this);
dialog.setWindowTitle(tr("进度对话框"));
dialog.setWindowModality(Qt::WindowModal);//将对话框设置为模态
dialog.show();
//演示复制进度
for(int i=0;i<999999999;i++)
{
dialog.setValue(i);//设置进度条的当前值
QCoreApplication::processEvents();//避免页面冻结
if(dialog.wasCanceled())
{
break;
}
dialog.setValue(999999999);
qDebug()<
g.错误消息对话框
//错误消息对话框
void Widget::on_pushButton_7_clicked()
{
errordlg->setWindowTitle(tr("错误信息对话框"));
errordlg->showMessage(tr("这里是出错信息!"));
}
h.向导对话框
//3个向导页面
QWizardPage *Widget::createPage1()
{
QWizardPage *page=new QWizardPage;
page->setTitle(tr("介绍"));
return page;
}
QWizardPage *Widget::createPage2()
{
QWizardPage *page=new QWizardPage;
page->setTitle(tr("用户信息选择"));
return page;
}
QWizardPage *Widget::createPage3()
{
QWizardPage *page=new QWizardPage;
page->setTitle(tr("结束"));
return page;
}
//向导对话框
void Widget::on_pushButton_8_clicked()
{
QWizard wizard(this);
wizard.setWindowTitle(tr("向导对话框"));
wizard.addPage(createPage1());//添加向导页面
wizard.addPage(createPage2());
wizard.addPage(createPage3());
wizard.exec();
}
*完整代码
#include "widget.h"
#include "ui_widget.h"
#include "QDebug"
#include "QColorDialog"
#include "QFileDialog"
#include "QFontDialog"
#include "QLineEdit"
#include "QInputDialog"
#include "QMessageBox"
#include "QProgressDialog"
#include "QErrorMessage"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
errordlg=new QErrorMessage(this);
}
Widget::~Widget()
{
delete ui;
}
//颜色对话框
void Widget::on_pushButton_clicked()
{
QColor color=QColorDialog::getColor(Qt::red,this,tr("颜色对话框"));
qDebug()<<"color:"<pushButton_3->setFont(font);
}
else
{
qDebug()<setWindowTitle(tr("错误信息对话框"));
errordlg->showMessage(tr("这里是出错信息!"));
}
//3个向导页面
QWizardPage *Widget::createPage1()
{
QWizardPage *page=new QWizardPage;
page->setTitle(tr("介绍"));
return page;
}
QWizardPage *Widget::createPage2()
{
QWizardPage *page=new QWizardPage;
page->setTitle(tr("用户信息选择"));
return page;
}
QWizardPage *Widget::createPage3()
{
QWizardPage *page=new QWizardPage;
page->setTitle(tr("结束"));
return page;
}
//向导对话框
void Widget::on_pushButton_8_clicked()
{
QWizard wizard(this);
wizard.setWindowTitle(tr("向导对话框"));
wizard.addPage(createPage1());//添加向导页面
wizard.addPage(createPage2());
wizard.addPage(createPage3());
wizard.exec();
}
#ifndef WIDGET_H
#define WIDGET_H
#include
#include
#include
QT_BEGIN_NAMESPACE
namespace Ui { class Widget;class QErrorMessage; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
private slots:
void on_pushButton_clicked();
void on_pushButton_2_clicked();
void on_pushButton_3_clicked();
void on_pushButton_4_clicked();
void on_pushButton_5_clicked();
void on_pushButton_6_clicked();
void on_pushButton_7_clicked();
void on_pushButton_8_clicked();
private:
Ui::Widget *ui;
QErrorMessage *errordlg;//错误消息对话框
//向导对话框
QWizardPage *createPage1();
QWizardPage *createPage2();
QWizardPage *createPage3();
};
#endif // WIDGET_H
-
相关阅读:
JAVA:实现合并已排序的单链表算法(附完整源码)
Eclipse/IDEA常用快捷键
考研:研究生考试(五天学完)之《线性代数与空间解析几何》研究生学霸重点知识点总结之第四课欧氏空间
如何深入学习Java并发编程?
怎样在应用中实现自助报表功能
52、Flink 使用 Parametertool 获取应用参数代码示例
【OS】 JAVA 管程 单消费者-生产者问题
AnyCast技术
安卓打开第三方应用失败
CRC8校验算法源码——C语言版
-
原文地址:https://blog.csdn.net/m0_61628700/article/details/130912797