授权登录网站怎么做,济南好的seo,网络营销公司全网天下,seo杭州目录
Qt窗口
1.菜单栏
2.工具栏
3.状态栏
4.滑动窗口
QT对话框
1.基础对话框QDiaog
创建新的ui文件
模态对话框与非模态对话框
2.消息对话框 QMessageBox
3.QColorDialog
4.QFileDialog文件对话框
5.QFontDialog
6.QInputDialog Qt窗口
前言#xff1a;之前以上…目录
Qt窗口
1.菜单栏
2.工具栏
3.状态栏
4.滑动窗口
QT对话框
1.基础对话框QDiaog
创建新的ui文件
模态对话框与非模态对话框
2.消息对话框 QMessageBox
3.QColorDialog
4.QFileDialog文件对话框
5.QFontDialog
6.QInputDialog Qt窗口
前言之前以上的代码我们都是创建项目基于QWidget(控件)的项目实际上在开发过程中使用更多的是QMainWindow.QMainWindow的布局如下 最上层是一个窗口的标题下面是一个菜单栏在下层是一个工具栏在下层就是一个子窗口铆接部件最中间的就是中央控件。最下层有一个状态栏。通过这种方式我们的窗口就更加丰富了。接下来就逐一讲解每个部分。
当我们创建项目生成的代码好像和QWidget的大差不差进入QT Designer观察好像也差不多但当我们仔细观察右边的对象树我们就会发现不仅仅有一个主窗口还多了其他部件菜单栏状态栏这些部件在项目创建的时候就被自带了这里将所有组件进行介绍
1.菜单栏
我们可以看到在新建的项目中的ui的界面中的有一个请输入这个其实就是一个菜单我们可以选中输入还可以添加菜单项还可以添加菜单。这就是MianWindow的布局上来就是菜单最上层就是标题。 Qt 中的菜单栏是通过 QMenuBar 这个类来实现的。⼀个主窗⼝最多只有⼀个菜单栏。位于主窗⼝顶部、主窗⼝标题栏下⾯。 一个菜单栏中可以包含多个菜单. 每次菜单中可以包含多个菜单项. 添加菜单以及菜单项 //创建菜单栏QMenuBar * menubarnew QMenuBar();this-setMenuBar(menubar);//创建菜单QMenu * menu1new QMenu(文件(F));QMenu * menu2new QMenu(编辑(E));QMenu * menu3new QMenu(视图(V));QMenu * menu4new QMenu(构建(B));//并且设置简易快捷键alt快捷键淡然使用shrotcut创建快捷键也可以menubar-addMenu(menu1);menubar-addMenu(menu2);menubar-addMenu(menu3);menubar-addMenu(menu4);//添加菜单项QAction* action1new QAction(新建);QAction * action2new QAction(打开);QAction * action3new QAction(保存);QAction * action4new QAction(另存为);QAction * action5new QAction(退出);menu1-addAction(action1);menu1-addAction(action2);menu1-addAction(action3);menu1-addAction(action4);menu1-addAction(action5);//给具体Action添加信号槽或者给menu添加信号槽connect(action1,QAction::triggered,this,MainWindow::handle);
给菜单添加子菜单 //QMenuBar可以addMenu代表菜单,给QMenu菜单对象也可以addMenu。即菜单的子菜单QMenu* test1new QMenu(新建);QMenu * test2new QMenu(打开);menu2-addMenu(test1);menu2-addMenu(test2);
此外我们还可以添加分割线使用QMenu中的addseprator这样的函数将我们的菜单项分成几部分。
//设置分割并且添加图标。menu1-addSeparator();//对菜单项行图标i的设置当然菜单也是可以设置的menu1-setIcon(QPixmap(:/pictures/file.png));//菜单设置图标会将标题覆盖掉action1-setIcon(QPixmap(:/pictures/files.png));action2-setIcon(QPixmap(:/pictures/fileopen.png));但是这里的代码有一个小问题我们这里是自己创建的一个菜单栏然后添加到窗口当中二在项目创建之后就已经为我们创建好了一个MenuBar此时改菜单栏就失去了与对象树的连接我们自己创建的这个可以不用我们释放但是原先的这个就需要我们去释放否则会造成内存泄漏。
2.工具栏
QMianWindow的第三层就是工具栏QToolBar Area在上下左都能可以进行工具栏的设置。
实际上就是一堆按钮进行某些简单工具的快速使用。
QToolBar * toolbarnew QToolBar();this-addToolBar(toolbar);//这里是add说明工具栏可以有多个而setMenubar说明只能设置一个。toolbar-setMovable(true);//设置可以拖拽QAction* a1new QAction(计算器);QAction * a2new QAction(保存);toolbar-addAction(a1);toolbar-addAction(a2); 除了这种写法工具栏中的action其实也可以出现在菜单中。其次我们在添加action的时候指定初始位置在前面再加一个参数QLeftToolBarArea. this-addToolBar(Qt::LeftToolBarArea,toolbar);toolbar -setAllowedAreas(Qt::LeftToolBarArea| Qt::RightToolBarArea); • Qt::LeftToolBarArea 停靠在左侧 • Qt::RightToolBarArea 停靠在右侧 • Qt::TopToolBarArea 停靠在顶部 • Qt::BottomToolBarArea 停靠在底部 • Qt::AllToolBarAreas 以上四个位置都可停靠 3.状态栏 状态栏是应⽤程序中输出简要信息的区域。⼀般位于主窗⼝的最底部⼀个窗⼝中最多只能有⼀个状 态栏。在 Qt 中状态栏是通过 QStatusBar类 来实现的。 在状态栏中可以显⽰的消息类型有 • 实时消息如当前程序状态 • 永久消息如程序版本号机构名称 • 进度消息如进度条提⽰百分百提⽰ //创建状态栏QStatusBar *statusbarthis-statusBar();//有就返回没有就创建this-setStatusBar(statusbar);// statusbar-showMessage(当前无状态);//显示状态信息//如果设置了message就不能显示标签内容了//添加子控件QLabel *labelnew QLabel();label-setText(标签一);statusbar-addWidget(label);//从左往右addPermanentWidget是从上往下QLabel *label2new QLabel();label2-setText(标签二);statusbar-addWidget(label2);//当然其他子控件也可以一般会有进度条提醒当前任务状态4.滑动窗口 在 Qt 中浮动窗⼝也称之为铆接部件。浮动窗⼝是通过 QDockWidget类 来实现浮动的功能。浮动窗 ⼝⼀般是位于核⼼部件的周围可以有多个。 我们可以对滑动窗口进行拖拽。 //添加滑动窗口QDockWidget * dockwidgetnew QDockWidget();this-addDockWidget(Qt::LeftDockWidgetArea,dockwidget);//同时设置初始位置dockwidget-setWindowTitle(浮动窗口);//设置标题//我们也可以在浮动窗口上添加组件但是不能直接添加需要新建一个QwidgetQWidget * windownew QWidget();QGridLayout *layoutnew QGridLayout;window-setLayout(layout);QPushButton * button new QPushButton();QPushButton * button2 new QPushButton();button-setText(按钮);button2-setText(按钮二);layout-addWidget(button,0,0);layout-addWidget(button2,0,1);dockwidget-setWidget(window);dockwidget-setAllowedAreas(Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea | Qt::TopToolBarArea);//设置允许拖拽的位置 QT对话框 //将delete与点击信号关联,QDialog提供了属性。log-setAttribute(Qt::WA_DeleteOnClose); 对话框是 GUI 程序中不可或缺的组成部分。⼀些不适合在主窗⼝实现的功能组件可以设置在对话框 中。对话框通常是⼀个顶层窗⼝出现在程序最上层⽤于实现短期任务或者简洁的⽤⼾交互。Qt常 ⽤的内置对话框有QFiledialog⽂件对话框、QColorDialog颜⾊对话框、QFontDialog字体对话框、QInputDialog 输⼊对话框和 QMessageBox消息框 。 在我们创建项目时其中就可以选择创建一个对话框。不过我们并不是直接就在窗口上创建一个dialog而是创建其他的类之后让dialog去继承其他类所以这里还是用QMianWindow. 简单看一下 void MainWindow::on_pushButton_clicked()
{//每次点击就会新键一个对话框会造成内存泄露QDialog * lognew QDialog (this);log-resize(200,200);log-show();
} 因此还需要去设置一个属性 //虽然主窗口关闭会释放资源但是我们还是希望在关闭窗口的时候就释放资源//将delete与点击信号关联,QDialog提供了属性。log-setAttribute(Qt::WA_DeleteOnClose); 通过这种方式就不会出现无限创建的情况了。 1.基础对话框QDiaog 既然对话框上可以放各种部件那么我们就可以就可以实现一个丰富的对话框我们直接在原项目中再创建一个类用来表示对话框。
之后我们就可以在主窗口创建使用在本地dialog进行其他构建的编写,需要注意的是要么手动写关闭释放要么直接调用接口Atrribute(WA_DELETE_ON_CLOSE).
创建新的ui文件
其次如果只是创建一个类文件效果貌似并不是太好啊我们只能通过代码的方式进行其他构建的添加所以在这里添加文件时我们还可以选择一个QT中的设计器界面类 并且还会为我们提供一些模板供使用。此时就会一步到位为我们创建好类和ui文件。 之后我们就可以在deisgner中进行图形化编辑了。 模态对话框与非模态对话框 模态对话框指的是显⽰后⽆法与⽗窗⼝进⾏交互是⼀种阻塞式的对话框。使⽤QDialog::exec() 函数调⽤。 模态对话框适⽤于必须依赖⽤⼾选择的场合⽐如消息显⽰⽂件选择打印设置等。 模态对话必须要多对话框进行操作其他行为被阻止了。 ⾮模态对话框 ⾮模态对话框显⽰后独⽴存在可以同时与⽗窗⼝进⾏交互是⼀种⾮阻塞式对话框使⽤ QDialog::show()函数调⽤。 Dialog1 * lognew Dialog1(this);log-setAttribute(Qt::WA_DeleteOnClose);log-show();log-resize(200,200);//log-exec(); 2.消息对话框 QMessageBox 显示一些消息给用户在提供一些选择给用户这是消息对话框最常用的场景例如系统警告是否关闭是否保存等等。消息对话框的mudle默认是模态的与此对应QT页内置了相关的按钮以及图标如下 内置按钮 QMessageBox * messagenew QMessageBox(this);//先创建一个messgeboxd的对象message-setIcon(QMessageBox::Warning);//QT内部也提供了一些图标message-setWindowTitle(这是一个对话框);message-resize(300,300);message-setStandardButtons(QMessageBox::Ok | QMessageBox::Save | QMessageBox::Cancel );//设置基本的按钮。例如ok与保存按钮,这些都是内置的常用的按钮message-show(); 当然我们也可以进行自定义按钮QMessageBox为我们提供了添加 button的方法在添加时我们还需要设置对应的按钮类型。 按钮类型 QMessageBox * messagenew QMessageBox(this);//先创建一个messgeboxd的对象message-setIcon(QMessageBox::Warning);//QT内部也提供了一些图标message-setWindowTitle(这是一个对话框);message-resize(300,300);QPushButton * buttonnew QPushButton();button-setText(自定义按钮);message-addButton(button,QMessageBox::AcceptRole);//设置为接受式的按钮实际上与内置的ok按钮是一致的message-show(); 虽然对于内置按钮无法进行槽函数和信号的绑定但是提供了更加简单的方式我们只需要调用接口exec的返回值在模式化显示之后返回值是选区的按钮因此对返回值进行判断就可以去执行你想要进行的操作。 QMessageBox * messagenew QMessageBox(this);//先创建一个messgeboxd的对象message-setIcon(QMessageBox::Warning);//QT内部也提供了一些图标message-setWindowTitle(这是一个对话框);message-resize(300,300);QPushButton * buttonnew QPushButton();button-setText(自定义按钮);connect(button,QPushButton::clicked,this,Widget::handle);message-addButton(button,QMessageBox::AcceptRole);//设置为接受式的按钮实际上与内置的ok按钮是一致的message-setStandardButtons(QMessageBox::Ok | QMessageBox::Save | QMessageBox::Cancel );//设置基本的按钮。例如ok与保存按钮,这些都是内置的常用的按钮int btnmessage-exec();\if(btnQMessageBox::Ok){qDebug()Ok;}else if(btnQMessageBox::Save){qDebug()Save;}else if(btnQMessageBox::Cancel){qDebug()Cancel;} //除了以上的方式对话框以及内置按钮的创建还有更简便的方式QT内置了函数我们调用即可QMessageBox::warning(this,对话标题,对话框,QMessageBox::Ok,QMessageBox::Cancel);//通过该接口可以直接创建对话框以及按钮//除了warning还有information等。 3.QColorDialog
QColorDialog即颜色对话框即在内部内置了一个调色板一样的东西是用户直接选中颜色就可以进行颜色的改变。 // QColorDialog * colordialognew QColorDialog(this);
// colordialog-resize(400,400);
// colordialog-setAttribute(Qt::WA_DeleteOnClose);
// colordialog-show();//我们不用上述方式来创建显示对于颜色对话框Qt也内置了一个静态函数getcolor我们可以直接调用QColor colorQColorDialog::getColor(QColor(0,255,0),this,选择颜色);
//参数一次为颜色父类标题qDebug()color; //返回值就是选择颜色后点击确定返回的颜色 4.QFileDialog文件对话框
可以通过QFileDialog打开一个文件 获取文件路径删除文件的等。 1、打开⽂件⼀次只能打开⼀个⽂件 QString getOpenFileName (QWidget *parent nullptr, const QString caption QString(), const QString dir QString(), const QString filter QString(), QString *selectedFilter nullptr, QFileDialog::Options options Options()) 2、打开多个⽂件⼀次可以打开多个⽂件 QStringList getOpenFileNames (QWidget *parent nullptr, const QString caption QString(), const QString dir QString(), const QString filter QString(), QString *selectedFilter nullptr, QFileDialog::Options options Options()) 3、 保存⽂件 QString getSaveFileName (QWidget *parent nullptr, const QString caption QString(), const QString dir QString(), const QString filter QString(), QString *selectedFilter nullptr, QFileDialog::Options options Options()) void Widget::on_pushButton_clicked()
{QString name QFileDialog ::getOpenFileName(this,文件);//参数包含过滤器设置什么样的文件fileterqDebug()name;}void Widget::on_pushButton_2_clicked()
{QString name QFileDialog ::getSaveFileName(this,文件);qDebug()name;} QWidget *parent nullptr:父窗口部件widget。 const QString caption QString():对话框的标题。 const QString dir QString():初始目录。 const QString filter QString():文件过滤器。这个参数允许你指定用户可以在对话框中看到的文件类型。过滤器是一个或多个由分号 ; 分隔的模式字符串。 QString *selectedFilter nullptr:选择的过滤器。 QFileDialog::Options options Options():对话框选项 这里的保存并不是你一按就真的保存了这个保存需要我们在捕捉信号后去实现文件保存。 5.QFontDialog Qt 中提供了预定义的字体对话框类 QFontDialog⽤于提供选择字体的对话框部件。 还是使用内置的静态函数进行创建。 bool *ok: 这是一个指向布尔值的指针。当字体对话框关闭时这个布尔值会被设置为 true如果用户选择了一个字体并确认或 false如果用户取消了对话框或没有选择任何字体。这允许调用者知道用户是否成功选择了一个字体。 const QFont initial: 这是一个 QFont 类型的常量引用表示在字体对话框中最初显示的字体。这允许调用者预先设定一个初始字体以便用户从这个字体开始选择。 QWidget *parent nullptr: 这是一个指向 QWidget 的指针用于指定字体对话框的父窗口。如果提供了父窗口字体对话框就会作为该窗口的子窗口显示。如果设置为 nullptr字体对话框将没有父窗口。 const QString title QString(): 这是一个 QString 类型的常量引用用于指定字体对话框的标题。如果未提供标题则可能会使用默认的标题这取决于具体的实现。 FontDialogOptions options FontDialogOptions(): 这是一个枚举类型的组合用于指定字体对话框的选项或行为。FontDialogOptions 是一个枚举类型注意这里使用的是假设的枚举名Qt 中实际使用的是 QFontDialog::FontDialogOptions它可能包含各种标志如指定对话框是否应该显示颜色选择、样式选择等。如果未提供选项字体对话框将使用默认的行为和选项。 bool okfalse;QFont font QFontDialog ::getFont(ok);//根据对话框按钮的选择进行bool值设置即输入性参数this-setFont(font);//拿到字体信息我们就可以对想要设置的设置了qDebug()font;
打印的信息QFont(华文仿宋,9,-1,5,400,0,0,0,0,0,0,0,0,0,0,1,Regular) 6.QInputDialog Qt 中提供了预定义的输⼊对话框类QInputDialog⽤于进⾏临时数据输⼊的场合 1、双精度浮点型输⼊数据对话框 double getDouble (QWidget *parent, const QString title, const QString label, double value 0, double min -2147483647, double max 2147483647, int decimals 1, bool *ok nullptr, Qt::WindowFlags flags Qt::WindowFlags()) 2、整型输⼊数据对话框 int getInt (QWidget *parent, const QString title, const QString label, int value 0, int min -2147483647, int max 2147483647, int step 1, bool *ok nullptr, Qt::WindowFlags flags Qt::WindowFlags()); 3、选择条⽬型输⼊数据框 QString getItem (QWidget *parent, const QString title, const QString label, const QStringList items, int current 0, bool editable true, bool *ok nullptr, Qt::WindowFlags flags Qt::WindowFlags(), Qt::InputMethodHints inputMethodHints Qt::ImhNone) 可以进行输入设置为浮点数整数数据框三种类型。 //double numQInputDialog::getDouble(this,输入框,标签);//double numQInputDialog::getInt(this,输入框,标签);QStringList item;item.push_back(哎呦~);item.push_back(哎呦~);item.push_back(你干嘛~);QString numQInputDialog::getItem(this,输入框,标签,item);qDebug()num;