我有个问题.我有这个代码:
balls = [Ball() for i in range(1, 10)]
Run Code Online (Sandbox Code Playgroud)
所以,当我说Ball()时,这将在QDialog上画一个球.然后当这个完成时,我正在QDialog
无限循环中移动球.我想说些什么,一边QDialog.isVisible()
移动它们.
我没有任何父对话框或表单或任何子对话框或表单.这就是这个QDialog
.我知道这样做很愚蠢QDialog
,但我不允许使用其他任何东西QDialog
.
当我为对话框键入命令destroy()时(我还没有尝试过其他类型的窗口)Qt返回此消息:
X Error: BadDrawable (invalid Pixmap or Window parameter) 9
Extension: 130 (MIT-SHM)
Minor opcode: 3 (X_ShmPutImage)
Resource id: 0x0
X Error: BadDrawable (invalid Pixmap or Window parameter) 9
Extension: 130 (MIT-SHM)
Minor opcode: 3 (X_ShmPutImage)
Resource id: 0x0
Run Code Online (Sandbox Code Playgroud)
但如果我输入'close()',它的工作正确.
那么close()和destroy()之间的区别是什么?或者有什么区别?
在我的应用程序中,我有一个项目功能,但它需要一系列对话框才能工作.
开始时,用户必须打开现有项目或创建新项目,并且在创建新项目时,用户必须指定文件夹.
因此,在新项目或现有项目之间有一个第一个用于选择的对话框,另一个用于在新项目的情况下打开以选择文件夹.
现在,我在第一个上调用exec_()方法,并在里面做所有事情(创建第二个对话框,使用它,等等).直接后果:它使用副作用很麻烦.
所以问题是:在QT中可以干净地链接对话框吗?
我是一名学生程序员使用Qt构建和应用工作,我很难找出当用户退出Dialog时如何处理而不保存更改.该对话框主要用于数据输入,因此能够识别是否已经进行了更改,然后在退出之前向用户提供保存选项将非常有用.我在QDialog上查看了Qt的文档,如果按下退出按钮,则没有找到与返回模式有关的任何内容.有一种方法可以确定何时单击退出按钮是首要任务.此外,作为一名学生程序员,我也愿意接受有关如何在数据之前和之后进行比较的最佳实践的任何想法.数据输入表格,所以我猜我必须做这样的事情
connect(some kinda exit handler, SIGNAL(clicked), this, SLOT(comparePreAndPostTable)
QVector<QString> prechanges = everything from the table
QVector<QString> postchanges = everything from table when exit is clicked
if(prechanges != postchanges)
{
Give oppertunity to save
}
Run Code Online (Sandbox Code Playgroud)
任何帮助表示赞赏!如果Qt已经拥有了这个东西真的很棒!
(在Qt 4.8和Ubuntu 12.10上使用C ++进行测试)
我有一个显示QDialog的主窗口。当我将“对话”窗口全屏显示时,即使它似乎是一个适当的窗口,它也似乎始终无法工作。意思是,窗口有时会全屏显示。
有人知道吗?我知道Qt指出它可能无法在所有X环境中使用,但是可以不是那么糟糕,不是吗?
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QDialog* d = new QDialog();
d->setModal(false);
d->show();
qDebug() << d->isWindow();
// works most of the times, though not always:
// d->showFullScreen();
// sometimes works, sometimes it doesn't:
QTimer::singleShot(2000, d, SLOT(showFullScreen()));
}
Run Code Online (Sandbox Code Playgroud) 好吧,我有一个文本编辑器,上面有一个按钮...我希望文本编辑器在一个布局内部,以便它增加和减小它的大小QDialog
,但我不想对按钮做同样的事情,顺便说一下,它没有我想要的尺寸,也无法改变它.我能做什么?
码:
from PyQt4 import QtCore, QtGui
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
class TextEditorDlg(QDialog):
def __init__(self, parent=None):
QtGui.QDialog.__init__(self, parent)
self.resize(500, 400)
self.Grid = QtGui.QGridLayout(self)
self.button = QtGui.QPushButton(self)
self.Grid.addWidget(self.button, 0, 0)
self.lineEdit = QtGui.QLineEdit(self)
self.textEdit = QtGui.QTextEdit(self)
self.Grid.addWidget(self.lineEdit, 1, 0)
self.Grid.addWidget(self.textEdit, 2, 0)
if __name__ == '__main__':
app = QApplication(sys.argv)
myapp = TextEditorDlg()
myapp.show()
sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)
现在看到问题?
我有一个来自QWidget的MyListWidget类.我将parent和flags传递给基类QWidget构造函数(在测试中尝试了Qt :: Dialog和Qt :: Popup),但是自定义小部件显示在屏幕的中心,而不是以其父级为中心.
MyListWidget* myListWidget = new MyListWidget(this, Qt::Dialog);
Run Code Online (Sandbox Code Playgroud)
这是构造函数:
MyListWidget::MyListWidget(QWidget* parent, Qt::WindowFlags flags)
: QWidget(parent, flags),
ui(std::auto_ptr<Ui::MyListWidget>(new Ui::MyListWidget))
{
ui->setupUi(this);
}
Run Code Online (Sandbox Code Playgroud)
如果我将此小部件放入单独的对话框中,则任何内容都可以按预期工 但为什么?
包装工作:
QDialog* popup = new QDialog(this, Qt::Popup);
QVBoxLayout* hLayout = new QVBoxLayout(popup);
// ... doing list creation like above
hLayout->addWidget(mmyListWidget);
popup->setLayout(hLayout);
const int width = mapListWidget->width();
const int height = mapListWidget->height();
popup->resize(width, height);
Run Code Online (Sandbox Code Playgroud)
任何想法可能会发生在这里?
我有一个QTreeView
文本文件列表.如果选择了一个文件,void FileList_dialog::on_openButton_released()
它应该将一个变量传递path
给对话框textFile_dialog
.
到现在为止我这样:
void FileList::on_openButton_released()
{
QModelIndex index = ui->treeView->currentIndex();
QFileSystemModel *model = (QFileSystemModel*)ui->treeView->model();
QString path = model->filePath(index);
QString name = model->fileName(index);
QString dir = path;
QFile file(path);
qDebug() << path;
textFile_dialog textFile;
textFile.setModal(true);
textFile.exec();
}
Run Code Online (Sandbox Code Playgroud)
但是如何将变量传递path
给textFile_dialog
?
我知道 QDialog 应该默认定位在父窗口的中心,但我显然错过了一些微妙之处。我有一个从 QWidget 派生的对象,我正在尝试使用以下测试代码创建一个以该对象为中心的子对话框
QDialog *dialog = new QDialog(this);
QPoint dialogPos = dialog->mapToGlobal(dialog->pos());
QPoint thisPos = mapToGlobal(this->pos());
dialog->exec();
Run Code Online (Sandbox Code Playgroud)
当我这样做时,对话框出现在我窗口的左上角。dialogPos 是 (0,0) 而 thisPos 是 (808, 371)。
我错过了什么?为什么对话框没有像我期望的那样居中显示?
我有QDialog
几个按钮和一个QTextEdit
.在写完东西之后QTextEdit
,我按下选项卡以进入其中一个按钮,但是当我按下选项卡时,会在标签空间中添加一个标签空间QTextEdit
.我该如何改变这种行为?
提前致谢