Dialog是一种常见的短周期任务和简介交互的top-level window。Dialog可以分为模式对话框和非模式对话框。Qt中的QDialog类提供了Dialog的原型,它可以有返回值和默认的按钮。每个窗体都有用户按下了enter键时默认的按钮。可以通过QPushButton::setDefault(), QPushButton::isDefault() and QPushButton::autoDefault()函数类设置控制窗体的默认按钮。如果用户按下了ESC按键,则默认会调用QDialog::reject()函数,最终将导致窗体关闭。为了定制窗体关闭动作,可以重写accept(), reject() or done()函数,closeEvent()函数只能用来恢复窗体位置和响应标准的close or reject *** 作。
模式对话框
模式对话框阻止同一应用程序中其他可见窗体的输入,用于向用户请求用户名的对话框通常是模式对话框。打开模式对话框后,用户必须完成和该对话框的交互并将其关闭,然后才能访问应用程序中的其他窗体。
最常用的显示Dialog的方法是调用它自己的exec()函数,当用户关闭dialog时,exec()将提供一个返回值。通常,为了得到适当的返回值,我们会设计一个按钮,比如OK按钮,连接accept()槽函数,Cancel按钮连接reject()函数。或者,你可以用done()槽函数实现接受还是拒绝。
另一种方法是通过调用setModal(true)或者setWindowModality(),然后调用show()。与exec()不同的是,show() 立即将控制权返回给用户。调用setModal(true)对于进度对话框特别的有用, 因为在进度对话框中,用户必须具有与对话框的交互能力,例如cancel一个厂的运行流程。如果用show() 和 setModal(true) 一起来实现一个长的 *** 作,你必须调用 QApplication::processEvents() 以使得用户能够于对话框交互。
非模式对话框
非模式对话框是可以在同一应用程序中相对于其他窗体独立进行 *** 作的dialogword中的查找和替换对话框就是一种非模式对话框,它可以同时和主窗口和对话框进行交互。非模式对话框同样用show()函数显示,并立刻返回控制权给用户。如果在隐藏对话框后调用show函数,对话框将显示在其原始位置。这是因为窗体管理器决定了未经开发者显式放置的窗口的位置。要恢复窗体的原始位置,需要在closeEvent()函数中保存位置,然后在show之前move窗体到保存的位置。
Qt提供了一些常用的标准对话框,如开发文件对话框、选择颜色对话框、信息提示和确认选择对话框、标准输入对话框等。用户无需再自己设计这些常用对话框。
QColorDialog
Dialog widget for specifying colors
QFileDialog
Dialog that allow users to select files or directories
QFontDialog
Dialog widget for selecting a font
QInputDialog
Simple convenience dialog to get a single value from the user
QMessageBox
Modal dialog for informing the user or for asking the user a question and receiving an answer
QProgressDialog
Feedback on the progress of a slow operation
QColorDialog
color dialog提供颜色集可供用户选择。
static getColor() 函数将显示颜色窗体且允许用户选择某个颜色。用setCustomColor()函数存储不同的自定义颜色。用 customColor() 获取自定义颜色。
QFileDialog
QFileDialog 就是常见的让用户选择文件或路径的对话框。最简单的调用方式是:
fileName = QFileDialog::getOpenFileName(this,
tr("Open Image"), "/home/jana", tr("Image Files (png jpg bmp)"));
登录后复制
上述调用方式将会创建一个模式对话框,对话框将展示"/home/jana"路径下的内容,且显示与"Image Files (png jpg bmp)"符合的文件。过滤器通常是下面的格式:
"Images (png xpm jpg);;Text files (txt);;XML files (xml)"
可以设置显示任何文件:
QFileDialog dialog(this);
dialogsetFileMode(QFileDialog::AnyFile);
登录后复制
设置过滤器:
dialogsetNameFilter(tr("Images (png xpm jpg)"));
QFontDialog
QFontDialog 为选择字体对话框。
bool ok;
QFont font = QFontDialog::getFont(
&ok, QFont("Helvetica [Cronyx]", 10), this);
if (ok) {
// the user clicked OK and font is set to the font the user selected
} else {
// the user canceled the dialog; font is set to the initial
// value, in this case Helvetica [Cronyx], 10
}
登录后复制

QInputDialog
QInputDialog 提供一个简单的输入对话框。有单行字符串输入、整数输入、浮点数输入、列表框选择输入和多行文本等输入方式。
bool ok;
QString text = QInputDialog::getText(this, tr("QInputDialog::getText()"),
tr("User name:"), QLineEdit::Normal,
QDir::home()dirName(), &ok);
if (ok && !textisEmpty())
textLabel->setText(text);
登录后复制
QMessageBox
消息对话框用于显示提示、警告、错误等信息,或进行确认选择,由warning(),information(), critical(), about()和question()等几个静态函数实现。其中QMessageBox:: question()函数用于打开一个选择对话框,显示信息,并提供Yes,No,OK,Cancle等按钮。
最简单的应用是显示信息:
QMessageBox msgBox;
msgBoxsetText("The document has been modified");
msgBoxexec();
登录后复制
int ret = QMessageBox::warning(this, tr("My Application"),
tr("The document has been modified\n"
"Do you want to save your changes"),
QMessageBox::Save | QMessageBox::Discard
| QMessageBox::Cancel,
QMessageBox::Save);
登录后复制
也可以自己设计按钮:
QMessageBox msgBox;
QPushButton connectButton = msgBoxaddButton(tr("Connect"), QMessageBox::ActionRole);
QPushButton abortButton = msgBoxaddButton(QMessageBox::Abort);
msgBoxexec();
if (msgBoxclickedButton() == connectButton) {
// connect
} else if (msgBoxclickedButton() == abortButton) {
// abort
}
登录后复制
QProgressDialog
QProgressDialog 显示程序的运行进度。可以将QProgressDialog设计为模式对话框或是非模式对话框,模式对话框使用起来比较简单。
QProgressDialog progress("Copying files", "Abort Copy", 0, numFiles, this);
progresssetWindowModality(Qt::WindowModal);
for (int i = 0; i < numFiles; i++) {
progresssetValue(i);
if (progresswasCanceled())
break;
// copy one file
}
progresssetValue(numFiles);
登录后复制
非模式的进度对话框比较适用于用户需要和应用交互且任务在后台运行的情况。典型的应用是基于QTimer (or QObject::timerEvent()),QSocketNotifier, 或者 QUrlOperator的任务,实际上MainWindow状态栏中的QProgressBar就是非模式的进度对话框。
// Operation constructor
Operation::Operation(QObject parent)
: QObject(parent), steps(0)
{
pd = new QProgressDialog("Operation in progress", "Cancel", 0, 100);
connect(pd, SIGNAL(canceled()), this, SLOT(cancel()));
t = new QTimer(this);
connect(t, SIGNAL(timeout()), this, SLOT(perform()));
t->start(0);
}
void Operation::perform()
{
pd->setValue(steps);
// perform one p
首先,采用GDAL读取图像:
GDALAllRegister();GDALDataset poDataset;
QString filename;
filename=QFileDialog::getOpenFileName(this,tr("Choose Images"),tr("All Fles ()"));
//Open the image
QByteArray ba = filenametoLatin1();
poDataset = (GDALDataset) GDALOpen( badata(),GA_ReadOnly );
其次,成功后,可以获取图像的一些基本信息,如下:
描述信息:
const char GDALDataset::GetDriver()->GetDescription(),通常是图像的格式;
图像大小:
图像宽度:int GDALDataset::GetRasterXSize();
图像高度:int GDALDataset::GetRasterYSize();
波段数:int GDALDataset::GetRasterCount();
投影信息:GDALDataset::GetProjectionRef(),有的图像没有投影信息;
地理坐标信息:double adfGeoTransform[6] GDALDataset::GetGeoTransform(adfGeoTransform);
波段信息:数据集中重要的信息,有波段尺寸、数据类型、颜色信息等;
获取波段的方法:poBand为指向第i个波段的指针
GDALRasterBand poBand;
poBand = poDataset->GetRasterBand(i);
波段尺寸:
int poBand->GetXSize();
int poBand->GetYSize();
数据类型:const char GDALGetDataTypeName(poBand->GetRasterDataType());
颜色信息:const char GDALGetColorInterpretationName(poBand->GetColorInterpretation());
首先在pro文件中添加CONFIG += qaxcontainer 接着程序实现 QString filepath=QFileDialog::getSaveFileName(this,tr("Save orbit"),"",tr("Microsoft Office 2007 (xlsx)"));//获取保存路径 if(!filepathisEmpty()){ QAxObject excel = new QAxObject(this); excel->setControl("ExcelApplication");//连接Excel控件 excel->dynamicCall("SetVisible (bool Visible)","false");//不显示窗体 excel->setProperty("DisplayAlerts", false);//不显示任何警告信息。如果为true那么在关闭是会出现类似“文件已修改,是否保存”的提示 QAxObject workbooks = excel->querySubObject("WorkBooks");//获取工作簿集合 workbooks->dynamicCall("Add");//新建一个工作簿 QAxObject workbook = excel->querySubObject("ActiveWorkBook");//获取当前工作簿 QAxObject worksheets = workbook->querySubObject("Sheets");//获取工作表集合 QAxObject worksheet = worksheets->querySubObject("Item(int)",1);//获取工作表集合的工作表1,即sheet1 QAxObject cellX,cellY; for(int i=0;i
querySubObject("Range(QVariant, QVariant)",X);//获取单元格 cellY = worksheet->querySubObject("Range(QVariant, QVariant)",Y); cellX->dynamicCall("SetValue(const QVariant&)",QVariant(ui->tableWidget->formula(i,0)toInt()));//设置单元格的值 cellY->dynamicCall("SetValue(const QVariant&)",QVariant(ui->tableWidget->formula(i,1)toInt())); } workbook->dynamicCall("SaveAs(const QString&)",QDir::toNativeSeparators(filepath));//保存至filepath,注意一定要用QDir::toNativeSeparators将路径中的"/"转换为"\",不然一定保存不了。 workbook->dynamicCall("Close()");//关闭工作簿 excel->dynamicCall("Quit()");//关闭excel delete excel; excel=NULL; }
有很多种方法,但是很多方法要么这个有问题,要么那个有问题,最后终于找到一种没问题的方法。记录一下:
Loginpy(登录窗口)文件
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5QtCore import
from PyQt5QtWidgets import QFileDialog, QMessageBox, QDockWidget, QListWidget
from PyQt5QtGui import
from Ui_Login import Ui_Login_Window #由UI文件生成py文件后,导入创建的GUI类
from Main import # Mainpy为 主窗口代码文件
from class_MSSQL import MSSQL
#QtWidgetsQMainWindow:继承该类方法
class Login_window(QtWidgetsQMainWindow,Ui_Login_Window):
#__init__: 析构函数,也就是类被创建后就会预先加载的项目。
# 马上运行,这个方法可以用来对你的对象做一些你希望的初始化。
def __init__(self):
#这里需要重载一下Login_window,同时也包含了QtWidgetsQMainWindow的预加载项。
super(Login_window, self)__init__()
selfsetupUi(self)
# 将点击事件与槽函数进行连接
selfbtn_loginclickedconnect(selfbtn_login_fuc)
#登录按钮 函数
def btn_login_fuc(self):
#1 获取输入的账户和密码
account = selftxt_1text() # 记得text要打括号()!
password = selftxt_2text()
if account == "" or password == "":
reply = QMessageBoxwarning(self,"警告","账号密码不能为空,请输入!")
return
#2 查询数据库,判定是否有匹配
ms = MSSQL()
result = msLogin_result(account, password)
if(len(result) > 0):
#1打开新窗口
Ui_Mainshow()#2关闭本窗口
selfclose()
else:
reply = QMessageBoxwarning(self,"警告","账户或密码错误,请重新输入!")
if __name__ == '__main__': #如果这个文件是主程序。
app = QtWidgetsQApplication(sysargv) #QApplication相当于main函数,也就是整个程序(很多文件)的主入口函数。对于GUI程序必须至少有一个这样的实例来让程序运行。
window = Login_window() #生成一个实例(对象)
Ui_Main = Ui_Main() #生成主窗口的实例
windowshow() #有了实例,就得让它显示。这里的show()是QWidget的方法,用来显示窗口。
sysexit(appexec_()) # 调用sys库的exit退出方法,条件是appexec_()也就是整个窗口关闭。
Mainpy(主窗口)文件
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5QtCore import
from PyQt5QtWidgets import
from PyQt5QtGui import
from Ui_Main import Ui_MainWindow #由UI文件生成py文件后,导入创建的GUI类
import math
from PIL import Image, ImageDraw, ImageFont
import numpy as np
import os
import cv2 as cvcv
from class_Detection import Detection
class Ui_Main(QtWidgetsQMainWindow,Ui_MainWindow):
def __init__(self):
super(Ui_Main, self)__init__()
selfsetupUi(self)
# 将点击事件与槽函数进行连接
selfbtn_videoclickedconnect(selfbtn_video_fuc)
def btn_video_fuc(self):
filename = QFileDialoggetOpenFileName(self,'open file','/')
selftimer_camera = QTimer(self)
selfcap = cvcvcv2VideoCapture(filename[0])
selftimer_cameratimeoutconnect(selfshow_pic)
selftimer_camerastart(10) #1毫秒
def show_pic(self):
dc = Detection()
success,frame = selfcapread()
if success:
show = dcprocess_image(frame)
showImage = QImage(showdata, showshape[1], showshape[0],QImageFormat_RGB888)
selflabelsetPixmap(QPixmapfromImage(showImage))
selflabelsetScaledContents(True) #自适应
selftimer_camerastart(10)
if __name__ == '__main__':
app = QtWidgetsQApplication(sysargv)
window = Ui_Main()
windowshow()
sysexit(appexec_())
以上就是关于qtdialog显示时运行函数全部的内容,包括:qtdialog显示时运行函数、GDAL怎么用函数读取12位的图像信息、Qt里QAxObject应该怎么用等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)