Qt的对话框与窗口--自定义的对话框

Qt 5 重写QDialog自定义一个弹窗PMessageBox # 重写QDialog # 删除Qt标题栏的问号,使用setWindowFlags(Qt::CustomizeWindowHint |Qt::WindowCloseButtonHint); # QPushButton的StyleSheet 阅读详情

自定义的对话框

对话框的显示分模态对话框和非模态对话框。

创建对话框

1.创建对话框

单击Qt Creator的菜单项“File”→“New File or Project”,选择Qt类别下的“Qt Designer Form Class”,创建可视化设计的对话框类。在随后出现的向导里,选择窗口模板为Dialog without Buttons,并设置自定义对话框的类名。

会得到3个文件,分别为.h ,.c,ui文件。
设置好自己的对话框界面。

2.对话框的调用和返回值

设计QWDialogSize对话框的界面时,在上面放置了两个QPushButton按钮,并分别命名为btnOK和btnCancel,分别是“确定”和“取消”按钮,用于获取对话框运行时用户的选择。

在信号与槽编辑器里,将btnOK的clicked()信号与对话框的accept()槽关联,将btnCancel的clicked()信号与对话框的reject()槽关联即可,如图所示:
在这里插入图片描述

单击“确定”按钮会执行accept()槽(或在代码里调用accept()槽函数也是一样的),这会关闭对话框(默认情况下,对话框只是被隐藏,并不被删除),并返回QDialog::Accepted 作为exec()函数的返回值。

单击“取消”按钮会执行reject()槽函数,也会关闭对话框,并返回QDialog::Rejected作为exec()函数的返回值。

注意的是:
我们的主界面是没有办法去访问到我们的对话框上面的组件的信息的,所以我们必须通过对外的接口函数把数据传输出去,就是我们要提供公共的接口把,ui界面的数据给传输给主界面。或者是我们在对话框的构造函数的时候,把一个结构体的指针传入进来,接收数据信息。

1.创建一个模态对话框,并把数据给到主界面,并及时释放掉
void MainWindow::on_actTab_SetSize_triggered()
{ //模态对话框,动态创建,用过后删除
   QWDialogSize   *dlgTableSize=new QWDialogSize(this); 
   Qt::WindowFlags   flags=dlgTableSize->windowFlags();
   dlgTableSize->setWindowFlags(flags | Qt::MSWindowsFixedSizeDialogHint); 
   dlgTableSize->setRowColumn(theModel->rowCount(),
                          theModel->columnCount()); 
   int ret=dlgTableSize->exec();// 以模态方式显示对话框,
   if (ret==QDialog::Accepted)  
   { //OK按钮被按下,获取对话框上的输入,设置行数和列数
      int cols=dlgTableSize->columnCount();
      theModel->setColumnCount(cols);
      int rows=dlgTableSize->rowCount();
      theModel->setRowCount(rows);
   }
   delete dlgTableSize; 
}
Qt::WindowFlags:
Qt::Widget               //是一个窗口或部件,有父窗口就是部件,没有就是窗口
Qt::Window               //是一个窗口,有窗口边框和标题
Qt::Dialog               //是一个对话框窗口
Qt::Sheet                //是一个窗口或部件Macintosh表单
Qt::Drawer               //是一个窗口或部件Macintosh抽屉,去掉窗口左上角的图标
Qt::Popup                //是一个弹出式顶层窗口
Qt::Tool                 //是一个工具窗口
Qt::ToolTip              //是一个提示窗口,没有标题栏和窗口边框
Qt::SplashScreen         //是一个欢迎窗口,是QSplashScreen构造函数的默认值
Qt::Desktop              //是一个桌面窗口或部件
Qt::SubWindow            //是一个子窗口

//为窗口添加一些功能,窗口属性:

Qt::CustomizeWindowHint          //关闭默认窗口标题提示
Qt::WindowTitleHint              //为窗口修饰一个标题栏
Qt::WindowSystemMenuHint         //为窗口修饰一个窗口菜单系统
Qt::WindowMinimizeButtonHint     //为窗口添加最小化按钮
Qt::WindowMaximizeButtonHint     //为窗口添加最大化按钮
Qt::WindowMinMaxButtonsHint      //为窗口添加最大化和最小化按钮
Qt::WindowCloseButtonHint			//窗口只有一个关闭按钮
Qt::WindowContextHelpButtonHint
Qt::MacWindowToolBarButtonHint
Qt::WindowFullscreenButtonHint
Qt::BypassGraphicsProxyWidget
Qt::WindowShadeButtonHint
Qt::WindowStaysOnTopHint	//总在最上面的窗口,置前
Qt::WindowStaysOnBottomHint
Qt::WindowOkButtonHint
Qt::WindowCancelButtonHint
Qt::WindowTransparentForInput

增加

this->setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint);

去除

setWindowFlags(windowFlags()& ~Qt::WindowMaximizeButtonHint);//去掉最大化按钮

从代码中可以看到,每次单击此工具栏按钮时,对话框都被重新创建。创建后用QDialog的setWindowFlags()函数将对话框设置为固定大小,然后调用对话框的自定义函数setRowColumn(),将主窗口数据模型theModel的现有的行数和列数显示到对话框上的两个SpinBox组件里。

调用对话框的exec()函数,以模态显示的方式显示对话框。模态显示方式下,用户只能在对话框上操作,不能操作主窗口,主程序也在此处等待exec()函数的返回结果。

当用户单击“确定”按钮关闭对话框后,exec()返回结果为QDialog::Accepted,主程序获得此返回结果后,通过对话框的自定义函数columnCount()和rowCount()获得对话框上新输入的列数和行数,然后设置为数据模型的列数和行数。

最后使用delete删除创建的对话框对象,释放内存。所以,关闭对话框时,会出现QWDialogSize析构函数里的消息提示对话框。

注意:
在对话框上单击按钮或关闭对话框时,对话框只是隐藏(缺省的),而并没有从内存中删除。如果对话框一关闭就自动删除,则在后面调用对话框的自定义函数获得输入的行数和列数时会出现严重错误。所以,我们需要拿到自己想的数据之后再进行delete。

2.创建模态对话框的一次创建,多次使用,存储对话框的指针
void MainWindow::on_actTab_SetHeader_triggered()
{//一次创建,多次调用,对话框关闭时只是隐藏
   if (dlgSetHeaders==NULL) 
     dlgSetHeaders = new QWDialogHeaders(this);
   if (dlgSetHeaders->headerList().count()!=theModel->columnCount())
   {//如果表头列数变化,重新初始化
     QStringList strList;
     for (int i=0;i<theModel->columnCount();i++)//获取现有的表头标题
       strList.append(theModel->headerData(i,Qt::Horizontal,
             Qt::DisplayRole).toString());
     dlgSetHeaders->setHeaderList(strList);//对话框初始化显示
   }

   int ret=dlgSetHeaders->exec();// 以模态方式显示对话框
   if (ret==QDialog::Accepted) //OK键被按下
   {
      QStringList strList=dlgSetHeaders->headerList();
      theModel->setHorizontalHeaderLabels(strList);// 设置模型的表头标题
   }
}
3.非模态对话框,关闭的时候自动删除
void MainWindow::on_actTab_Locate_triggered()
{//创建 StayOnTop的对话框,对话框关闭时自动删除
   ui->actTab_Locate->setEnabled(false); 
   dlgLocate = new QWDialogLocate(this);
   dlgLocate->setAttribute(Qt::WA_DeleteOnClose); //对话框关闭时自动删除
   Qt::WindowFlags   flags=dlgLocate->windowFlags(); //获取已有flags
   dlgLocate->setWindowFlags(flags | Qt::WindowStaysOnTopHint); //StayOnTop

   dlgLocate->setSpinRange(theModel->rowCount(),theModel->columnCount());
   QModelIndex curIndex=theSelection->currentIndex();
   if (curIndex.isValid())
      dlgLocate->setSpinValue(curIndex.row(),curIndex.column());
   dlgLocate->show();  //非模态显示对话框
}
4.对话框中操作主窗口

示例代码:

void QWDialogLocate::on_btnSetText_clicked()
{//定位到单元格,并设置字符串
   int row=ui->spinBoxRow->value(); //行号
   int col=ui->spinBoxColumn->value();//列号
   MainWindow *parWind = (MainWindow*)parentWidget(); //获取主窗口
   parWind->setACellText(row,col,ui->edtCaption->text()); //调用主窗口函数
   if (ui->chkBoxRow->isChecked()) //行增
      ui->spinBoxRow->setValue(1+ui->spinBoxRow->value());
   if (ui->chkBoxColumn->isChecked()) //列增
      ui->spinBoxColumn->setValue(1+ui->spinBoxColumn->value());
}

想要在对话框中操作主窗口,就需要获取主窗口对象,调用主窗口的函数并传递参数。在上面的代码中,通过下面一行语句获得主窗口对象:

MainWindow *parWind = (MainWindow*)parentWidget();

parentWidget()是QWidget类的一个函数,指向父窗口。在创建此对话框时,将主窗口的指针传递给对话框的构造函数,即:

dlgLocate = new QWDialogLocate(this);

所以,对话框的parentWidget指向主窗口。

然后调用主窗口的一个自定义的public函数setACellText(),传递行号、列号和字符串,由主窗口更新指定单元格的文字。下面是主窗口的setACellText()函数的代码。

void MainWindow::setACellText(int row, int column, QString text)
{//定位到单元格,并设置字符串
   QModelIndex index=theModel->index(row,column);//获取模型索引
   theSelection->clearSelection();
   theSelection->setCurrentIndex(index,QItemSelectionModel::Select); 
   theModel->setData(index,text,Qt::DisplayRole);//设置单元格字符串
}

这样就实现了在对话框里对主窗口进行的操作,主要是获取主窗口对象,然后调用相应的函数。

5.主窗口中操作对话框

因为父窗口中创建了对话框,是可以知道对话框的指针的,可以之间对对话框的指针进行操作就可以了。

示例代码如下:

void MainWindow::on_tableView_clicked(const QModelIndex &index)
{//单击单元格时,将单元格的行号、列号设置到对话框上
   if (dlgLocate!=NULL) 
      dlgLocate->setSpinValue(index.row(),index.column());
}

因为主窗口中定义了对话框的指针,只要它不为NULL,就说明对话框存在,调用对话框的一个自定义函数setSpinValue(),刷新对话框显示界面。QWDialogLocate的setSpinValue()函数实现如下:

void QWDialogLocate::setSpinValue(int rowNo, int colNo)
{//设置SpinBox组件的数值
   ui->spinBoxRow->setValue(rowNo);
   ui->spinBoxColumn->setValue(colNo);
}
6.窗口的CloseEvent事件

对话框和主窗口之间互相操作的关键是要有对方对象的指针,然后才能传递参数并调用对方的函数。

由于对话框是以非模态方式运行的,程序无法等待对话框结束后作出响应,但是可以利用窗口的CloseEvent事件。

事件(event)是由窗口系统产生的由某些操作触发的特殊函数,例如鼠标操作、键盘操作的一些事件,还有窗口显示、关闭、绘制等相关的事件。从QWidget继承的窗口部件常用的事件函数有如下几种。

closeEvent():窗口关闭时触发的事件,通常在此事件做窗口关闭时的一些处理,例如显示一个对话框询问是否关闭窗口。
showEvent():窗口显示时触发的事件。
paintEvent():窗口绘制事件。
mouseMoveEvent():鼠标移动事件。
mousePressEvent():鼠标键按下事件。
mouseReleaseEvent():鼠标键释放事件。
keyPressEvent():键盘按键按下事件。
keyReleaseEvent():键盘按键释放事件。

要利用对话框的closeEvent()事件,在类定义中声明了此事件的函数,其实现代码如下:

void QWDialogLocate::closeEvent(QCloseEvent *event)
{ //窗口关闭 event
   MainWindow *parWind = (MainWindow*)parentWidget(); //获取父窗口指针
   parWind->setActLocateEnable(true);//使能 actTab_Locate
   parWind->setDlgLocateNull(); //将窗口指针设置为NULL
}

利用closeEvent()事件,可以询问窗口是否退出,例如为主窗口添加closeEvent()事件的处理,代码如下:

void MainWindow::closeEvent(QCloseEvent *event)
{ //窗口关闭时询问是否退出
   QMessageBox::StandardButton result=QMessageBox::question(this,
               "确认", "确定要退出本程序吗?",
               QMessageBox::Yes|QMessageBox::No |QMessageBox::Cancel,
               QMessageBox::No);
   if (result==QMessageBox::Yes)
      event->accept();
   else
      event->ignore();
}

这样,主窗口关闭时就会出现一个询问对话框,如果不单击“Yes”按钮,程序就不关闭;否则应用程序结束。

改进主窗口与对话框之间的交互

前面都是直接利用操作对应的指针,然后调用函数来进行操作主窗口或者对话框,比较的麻烦,而却直接操作指针不大好。可以利用信号与槽来改进。

如我们的主窗口为MainWindow,对话框为QWDialog采用信号与槽机制实现交互操作。

MainWindow类的定义的信号与处理函数:

class MainWindow : public QMainWindow
{
//信号处理函数
public slots:
   void   setACellText(int row, int column, QString &text);//设置单元格内容
   void   setActLocateEnable(bool enable);//设置actTab_Locate的enabled属性
//信号
signals:
   void   cellIndexChanged(int rowNo, int colNo);//当前单元格发生变化
   ...
};

MainWindow对应函数的代码:

void MainWindow::setACellText(int row, int column, QString &text)
{//定位到单元格,并设置字符串
   QModelIndex index=theModel->index(row,column);//获取模型索引
   theSelection->clearSelection();
   theSelection->setCurrentIndex(index,QItemSelectionModel::Select); 
   theModel->setData(index,text,Qt::DisplayRole);//设置单元格字符串
}
void MainWindow::setActLocateEnable(bool enable)
{ //设置actTab_Locate的enabled属性
   ui->actTab_Locate->setEnabled(enable);
}
void MainWindow::on_tableView_clicked(const QModelIndex &index)
{//单击单元格时发射信号,传递单元格的行号、列号
   emit cellIndexChanged(index.row(),index.column());
}

当点击对应的创建对话框按键时代码:

void MainWindow::on_actTab_Locate_triggered()
{//创建 StayOnTop的对话框,对话框关闭时自动删除
   QWDialogLocate *dlgLocate = new QWDialogLocate(this); 
   dlgLocate->setAttribute(Qt::WA_DeleteOnClose); 
   Qt::WindowFlags   flags=dlgLocate->windowFlags(); 
   dlgLocate->setWindowFlags(flags | Qt::WindowStaysOnTopHint); 
   dlgLocate->setSpinRange(theModel->rowCount(),theModel->columnCount());
   QModelIndex curIndex=theSelection->currentIndex();
   if (curIndex.isValid())
      dlgLocate->setSpinValue(curIndex.row(),curIndex.column());
//对话框发射信号,设置单元格文字
   connect(dlgLocate,SIGNAL(changeCellText(int,int,QString&)),
                 this,SLOT(setACellText(int,int,QString&)));
//对话框发射信号,设置actTab_Locate的属性
   connect(dlgLocate,SIGNAL(changeActionEnable(bool)),
                 this,SLOT(setActLocateEnable(bool)));
//主窗口发射信号,修改对话框上的spinBox的值   
   connect(this,SIGNAL(cellIndexChanged(int,int)),
                 dlgLocate,SLOT(setSpinValue(int,int)));
   dlgLocate->show(); //非模态显示对话框
}

QWDialog类定义中,与信号和槽相关的定义如下:

class QWDialog: public QDialog
{
private:
   void   closeEvent(QCloseEvent *event);
   void   showEvent(QShowEvent *event);
//处理函数
private slots:
   void   on_btnSetText_clicked();
public slots:
   void   setSpinValue(int rowNo, int colNo); 
//信号
signals:
   void   changeCellText(int row, int column, QString &text);
   void   changeActionEnable(bool en); 
};

对应的函数:

void QWDialogLocate::closeEvent(QCloseEvent *event)
{ //窗口关闭事件, 发射信号使 actTab_Locate 能用
   emit changeActionEnable(true);
}
void QWDialogLocate::showEvent(QShowEvent *event)
{//窗口显示事件, 发射信号使 actTab_Locate 不能用
   emit changeActionEnable(false);
}
void QWDialogLocate::setSpinValue(int rowNo, int colNo)
{//响应主窗口信号,更新spinBox的值
   ui->spinBoxRow->setValue(rowNo);
   ui->spinBoxColumn->setValue(colNo);
}
void QWDialogLocate::on_btnSetText_clicked()
{//发射信号,定位到单元格并设置字符串
   int row=ui->spinBoxRow->value(); //行号
   int col=ui->spinBoxColumn->value();//列号
   QString text=ui->edtCaption->text();//文字
   emit changeCellText(row,col,text);//发射信号
   if (ui->chkBoxRow->isChecked()) //行增
      ui->spinBoxRow->setValue(1+ui->spinBoxRow->value());
   if (ui->chkBoxColumn->isChecked()) //列增
      ui->spinBoxColumn->setValue(1+ui->spinBoxColumn->value());
}

经过这样修改后的程序,能实现与前面的实例完全相同的主窗口与对话框交互的功能,但是与前面互相引用的方式不同,这里使用Qt的信号与槽的机制,无须获取对方的指针,程序结构上更简单一些。

Qt5开发学习总结(三)——窗口部件的使用(QWidget和QDialog) 窗口部件 QT提供的默认基类只有QMainWindow、QWidget、和QDialog这三种,这三种窗体也是用的最多的,QMainWindow是带有菜单栏和工具栏的主窗口类,QDialog是各种对话框的基类,而他们全部继承自QWidget。不仅如此,所以的窗口部件都继承自QWidget,继承关系如图所示。 1.基础窗口部件QWidget QWidget类是所有用户界面对象的基类,被 阅读详情

相关推荐

QT对话框与多窗口程序

QT学习笔记

E_Diligent的博客 769

QT系列第8节 自定义对话框

qt中自定义对话框

hsy12342611的专栏 3952

自定义QDialog的标题栏

在使用Qt编写应用程序时,常常需要自定义对话框的外观和行为以满足特定的设计需求。其中一个常见的自定义任务是修改对话框的标题栏,以使其与应用程序的整体风格和主题一致。本文将介绍如何使用Qt的QDialog类来创建一个具有自定义标题栏的对话框,并提供相应的源代码示例。在CustomDialog的构造函数中,我们需要设置一些基本的对话框属性,例如窗口标题、大小和样式。同时,我们还需要将窗口的标题栏隐藏起来,以便后续自定义续自定义。首先,我们需要在Qt中创建一个自定义对话框类,继承自QDialog。

FuJavascript的博客 1197

【qt】自定义对话框

像我们前面一般就是只有一个主窗口,或者是只有一些简单的对话框,有的时候我们需要多窗口操作,并且需要一下高级的对话框的时候,我们就可以自定义来达到我们的需求。选择不带按钮的对话框类名,你自己随便起:OK,现在就开始来设计我们的对话框,这里可以设置按钮的图标哦.设计完我们的对话框设计对于自定义的对话框,也是有模板套路可寻的,注意的是数据之间的交互,面向对象的思想!确实我感觉我截的有点乱,来给你们一个我梳理的思维导图吧!是不是很爱你呀!哈哈.两岸猿声啼不住,轻舟已过万重山。

qq_74047911的博客 2303

QDialog QT:创建自定义对话框的步骤及示例代码

通过继承QDialog类并实现自己的对话框类,我们可以轻松创建定制化的对话框,并为其添加所需的控件和功能。首先,我们需要创建一个继承自QDialog的自定义对话框类。在上述示例中,我们创建了一个QDialog实例,设置了对话框的标题和大小,并添加了一个标签和一个按钮。在CustomDialog.cpp文件中,我们需要实现自定义对话框类的构造函数和析构函数,并可以添加对话框中所需的控件和功能。在主窗口或其他需要显示对话框的地方,我们可以使用自定义对话框类创建一个对话框实例,并调用exec()方法显示对话框。

EknOcaml的博客 571

Qt框架中的对话框与主窗口设计

本文详细解读了Qt框架中内置对话框和自定义主窗口的设计与实现。包括如何使用QFileDialog、QPrintDialog等标准对话框,以及如何通过继承QMainWindow来自定义主窗口、创建菜单栏、工具栏和状态栏。文章还探讨了在Windows和Mac OS X平台上使用原生对话框与Qt通用对话框的差异,以及如何存储和读取应用程序设置。

weixin_42393362的博客 329

QT一 qt安装,debugger源码,框架,项目文件pro,父子窗口,信号与槽,自定义信号,自定义槽,QT的坐标系统,内存回收机制,带菜单栏的窗口,对话框,lamda表达式

Qt是一个跨平台的C++图形用户界面应用程序框架这意味着我们在 windows上开发的QT 项目,在linux上打开后也能用。Qt对不同的平台提供了不同版本的安装包,可根据实际情况自行下载安装,本文档使用Qt 5.5.0 for Windows 32-bit (MinGW 4.9.2, 959 MB) (info) 版本就行讲解。MinGW32是这个意思: --> Minimalist GNU for Windows 32也就是说,如果我们要在 windows 上使用QT 写代码,就必须使用 Min

hunandede的博客 531

正弦波产生电路_文氏桥振荡

本文以文氏桥振荡为基础产生正弦波,介绍了原理、计算、应用时需要注意的一些点,并给出了实测可用的电路模板

白鹤忘机的博客 3万+

Qt 入门 3 之对话框 QDialog

Qt 入门 3 之对话框 QDialog(1)

yohnyang的博客 1127

Zigbee开发环境搭建:从驱动安装到程序烧录全指南

本文提供了一份详尽的Zigbee开发环境搭建全指南,涵盖从驱动安装到程序烧录的完整流程。重点介绍了使用SmartRF Flash Programmer和仿真器进行程序下载的关键步骤,并详细说明了USB转串口驱动的配置方法,帮助开发者快速构建稳定的Zigbee开发基础。

weixin_29195217的博客 393

TP4056锂电池充电电路设计原理与工程实践

锂离子电池充电管理是嵌入式电源系统的核心基础技术,其本质是通过恒流恒压(CC/CV)控制策略,匹配电池电化学特性以实现安全、高效、长寿命充放电。TP4056作为典型线性充电IC,以精简外围实现预充、恒流、恒压及自动截止全周期管理,但受限于线性拓扑的热耗散特性,必须协同散热设计、电阻精度选型与PCB布局进行系统级优化。该方案广泛应用于STM32智能小车、便携传感器节点等3.7V单节锂电供电场景,兼顾成本、可靠性与工程可实施性,是入门嵌入式硬件电源设计的关键实践范例。

weixin_36064575的博客 219

初识QT(四十二)——Qt自定义对话框及调用方法

在一个应用程序设计中,为了实现一些特定的功能,必领设计自定义对话框。 自定义对话框的设计一般从 QDialog 继承,并且可以采用UI设计器可视化地设计对话框。对话框的调用一般包括创建对话框、传递数据给对话框、显示对话框获取输入、判断对话框单击按钮的返回类型、获取对话框输入数据等过程。 本节将通过实例 samp6_2 来详细介绍这些原理。图 1 是实例 samp6_2 的主窗口,及其设置表格行列数...

图像学习之旅 3041

通俗易懂的图解二叉搜索树、AVL树和红黑树

搜索是一种很常见的需求,当数据较多时,如何找到目标对象时,即需要搜索查找。 那么如何快速找到目标呢,最朴素的思想就是暴力查找,一个一个对比。 显然,当数据量增大时,我们需要优化查找方法获取更快的查找速度,我们可以通过维护一个有序数组,从而实现二分查找,查找速度从O(n)降为O(longn)。 但是数组并不便于插入和删除,链表便成为了最好的选择。 既然是采用二分查找,那么不如直接按照查找的步骤维护一种数据结构,于是二叉搜索树出现了。 二叉搜索树的性质为: 若左子树不为空,则左子树上所有节点值都小于根结点值;

暗色光的博客 758

QT编程-----------------窗口部件的使用(QWidget和QDialog)

窗口部件 QT提供的默认基类只有QMainWindow、QWidget、和QDialog这三种,这三种窗体也是用的最多的,QMainWindow是带有菜单栏和工具栏的主窗口类,QDialog是各种对话框的基类,而他们全部继承自QWidget。不仅如此,所以的窗口部件都继承自QWidget,继承关系如图所示。 2.多窗口切换 Qt使用信号与槽机制来完成对象之间的协同操作,简单来说,信号与...

alpha_love的博客 1769

Overleaf-Latex-Elsevier-图、表、参考文献标题及引用、伪代码写法(绝对详细直观且易懂)

overleaf爱思唯尔模板踩过的一些坑以及解决办法

2403_87584552的博客 5851

永磁同步电机解耦控制实战:从电流反馈到内模解耦的算法演进与选型指南

本文深入探讨了永磁同步电机高性能驱动中的核心挑战——交叉耦合问题,并对比分析了电流反馈解耦和内模解耦两大主流算法的原理、性能与适用场景。文章指出,电流反馈解耦动态响应快但对参数敏感,内模解耦鲁棒性更强但略有滞后,为工程师在不同应用需求下的算法选型提供了清晰的实战指南。

weixin_29039773的博客 263

Qt学习笔记(Dialog)

#------------------------------------------------- # # Project created by QtCreator 2019-08-16T16:45:44 # #------------------------------------------------- QT += core gui greaterThan(QT_MAJO...

塞外听雪 367

基于 YOLOv26 的金属表面缺陷检测系统:智能视觉质检方案

摘要: 基于YOLOv26的金属表面缺陷检测系统采用深度学习技术,实现对划痕、裂纹、腐蚀等8类常见缺陷的自动化检测。系统通过数据增强预处理和YOLOv26模型的高精度识别能力,具备多类别分类、实时推理和强鲁棒性特点,适用于不同金属材质与光照条件。架构包含数据采集、预处理、YOLOv26检测和后处理模块,代码实现采用PyTorch框架,支持训练数据增强与标准化处理,为工业质检提供高效智能解决方案。

一键难忘的博客 588

Qt学习(五)自定义对话框,多窗口开发---添加设计师类, MDI多窗口开发

步骤:Add new->新建设计师类()->设计当前类的窗口样式->定义接口功能:单击调整行列按钮,弹出对话框,修改spinbox中对应的行列数,点击确定,对应表格中的行列会发生变化mainwindow.h 主函数调用的时候,需要包含该类的头文件,定义接口知识点:点击确定按钮,或者关闭按钮,如果不需要,实现的时候accept()或者即可private:Q_OBJECTpublic:private:delete ui;accept();

weixin_43528481的博客 1162

Openclaw错误分析与解决方案之:Agent couldn‘t generate a response. Please try again.

Openclaw错误分析与解决方案:Agent couldn't generate a response. Please try again.

多媒体编程、网络编程、系统编程、网络安全编程、驱动编程 1224

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Qt5(一)编写Qt多窗口程序

本文作者:小嗷 微信公众号:aoxiaoji 吹比QQ群:736854977 链接:https://f600lt.github.io/archives/ 摘要 : 这篇开始将从基础知识点开始一步一步QT到QT项目(原因就是读者说,QT类很多看不懂),这篇我们将实现多个窗口的切换显示。程序要实现的功能是: 一般来说,我们登录后,登录界面会自动的关闭以及我们需要填写注...

baidu_24919727的博客 6186

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Qt模态对话框与非模态对话框

自定义QWidget对话框,如果通过函数设置了对话框的显示设置后,会导致该对话框在模态显示的时候如果设置了父窗口指针,会导致模态的设置无效,这时需要在该函数中加一个参数Qt::Dialog就可以了。w.setWindowTitle("DefineDialog模态无效");//指定父窗口//设置模态dfg.show();w.show();

m0_71489826的博客 2241

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Qt自定义对话框及调用方法

在一个应用程序设计中,为了实现一些特定的功能,必领设计自定义对话框。 自定义对话框的设计一般从 QDialog 继承,并且可以采用UI设计器可视化地设计对话框。对话框的调用一般包括创建对话框、传递数据给对话框、显示对话框获取输入、判断对话框单击按钮的返回类型、获取对话框输入数据等过程。 本节将通过实例 samp6_2 来详细介绍这些原理。图 1 是实例 samp6_2 的主窗口,及其设置表格行列数...

weixin_38293453的博客 2343

QT第四课------QT窗口

我们可以自己写一个对话框,继承于QDialog一般有两种方式, 一种是纯代码的方式, 一种是界面操作(ui文件)我们创建一个类如下是我创建的类代码:.hQ_OBJECT//可以关联信号和槽public:private:.cpp//创建布局//创建标签QLabel * label = new QLabel("这个一个标签");//创建按钮QPushButton * button = new QPushButton("按钮");//添加进去。

m0_69984273的博客 1393

【QT】窗口MainWindow

qt窗口的概念,以及窗口包含的菜单栏、工具栏、状态栏的介绍及使用;浮动窗口(子窗口)的创建和使用;对话框:消息对话框、颜色对话框、文件对话框、字体对话框、输入对话框的使用和创建

lzb_kkk的博客 3370

15.QT窗口:主窗口、浮动窗口、对话框

Qt窗口是通过 QMainWindow类 来实现的。QMainWindow 是一个为用户提供主窗口程序的类,继承自QWidget类,并且提供了一个预定义的布局。QMainWindow包含一个菜单栏(menu bar)、多个工具栏(tool bars)、多个浮动窗口(铆接部件)(dock widgets)、一个状态栏(status bar)和一个中心部件(central widget),它是许多应用程序的基础,如文本编辑器,图片编辑器等。对话框是GUI程序中不可或缺的组成部分。

m0_63020222的博客 1177
上一篇: Qt的对话框与窗口--标准的对话框
下一篇: Qt的对话框与窗口--Qt中主要的窗体类及其用途
Simple_core
博客等级 码龄6年 929粉丝 93原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值