小编Amo*_*kar的帖子

“必须在 QWidget 之前构造一个 QApplication”

我正在尝试制作一个简单的 Qt 程序。我已经成功地构建并运行了几次程序。当我添加一个 getter 方法将字符串从 MainWindow 传递到对话框QFileDialog::getSaveFileName()时发生了这些错误但是当我在下面的行中注释时,程序会运行成功地。
主窗口.h

class MainWindow : public QMainWindow
{
    Q_OBJECT
    public:
    QString fileName();
};
Run Code Online (Sandbox Code Playgroud)

主窗口文件

QString MainWindow::fileName() {
    return "F:/Users/Admin/Desktop/" + dnldName;
}
Run Code Online (Sandbox Code Playgroud)

文件名()的用法

void Dialog::on_browseButton_clicked()
{
    QFileDialog folder;
    folder.setFileMode(QFileDialog::Directory);
    folder.setOption(QFileDialog::ShowDirsOnly);
    dirPath = folder.getSaveFileName(this, tr("Save File"), mWinObj.fileName(), tr("All Files"));
    ui->savePathEdit->setText(dirPath);
}
Run Code Online (Sandbox Code Playgroud)

该程序成功构建,但在我尝试运行时出现以下错误。

Starting F:\Users\Admin\Desktop\Imp Docs\C++ apps\build-GUINetworkApp-Desktop_Qt_5_2_0_MinGW_32bit-Debug\debug\GUINetworkApp.exe...
QWidget: Must construct a QApplication before a QWidget
Invalid parameter passed to C runtime function.
Invalid parameter passed to C runtime function.
F:\Users\Admin\Desktop\Imp Docs\C++ apps\build-GUINetworkApp-Desktop_Qt_5_2_0_MinGW_32bit-Debug\debug\GUINetworkApp.exe exited with …
Run Code Online (Sandbox Code Playgroud)

c++ qt

4
推荐指数
1
解决办法
1万
查看次数

如何让Qt应用程序更小

我是qt的新手.我制作了一个非常简单的qt程序,因为我没有商业许可证,我使用了依赖walker并将我的qtsdk文件夹中的所有.dll添加到我的release文件夹中.它工作得很好.但是当我检查它的大小时它非常大.我的问题是如何让它变小.还解释了静态库和动态库之间的区别以及它如何影响应用程序的大小.有多少种方法有没有购买商业许可证使qt应用程序更小.任何帮助表示赞赏.

c++ qt

3
推荐指数
1
解决办法
1135
查看次数

为什么带有 QCompleter 的自动完成功能的 QLineEdit 不显示?

QLineEdit我的程序中有两个slineEditfileName_EditlineEdit保存目录路径(从用户处获取)。然后用户在 .txt 文件中输入文件名fileName_Edit。我想在用户输入文件名时向他显示建议fileName_EditQCompleter我尝试像这样实现
:(dirContents是一个QStringList保存用户指定的目录内容的目录lineEdit

void MainWindow::on_lineEdit_textChanged(const QString &arg1)
{
    QCompleter *fileEditCompleter = new QCompleter(dirContents, this);
    fileEditCompleter->setCaseSensitivity(Qt::CaseInsensitive);
    fileEditCompleter->setCompletionMode(QCompleter::UnfilteredPopupCompletion);
    ui->fileName_Edit->setCompleter(fileEditCompleter);
}
Run Code Online (Sandbox Code Playgroud)

程序编译成功,但完成程序未显示。即使我尝试将textChanged信号连接到如下所示的函数,它也不会显示。

QObject::connect(&MainWindow::ui->lineEdit, SIGNAL(&textChanged(QString)), this,SLOT(&MainWindow::on_lineEdit_editingFinished())); 
Run Code Online (Sandbox Code Playgroud)

编辑:添加上面的行会出现错误:

预期的构造函数、析构函数或类型转换之前(标记

任何帮助将不胜感激。

c++ qt autocomplete

3
推荐指数
1
解决办法
7115
查看次数

存储格式化字符串,稍后传入值?

我有一本有很多字符串的字典。

是否可以存储带有占位符的格式化字符串并稍后传入实际值?

我在想这样的事情:

d = {
  "message": f"Hi There, {0}"
}

print(d["message"].format("Dave"))
Run Code Online (Sandbox Code Playgroud)

上面的代码显然不起作用,但我正在寻找类似的东西。

python templates string-formatting python-3.x f-string

3
推荐指数
1
解决办法
3700
查看次数

使用看门狗和Tkinter

所以我有一个小脚本监视文件的更改/修改,如果文件被更改它会做一堆东西,如:

class Event(LoggingEventHandler):
def dispatch(self, event):
    #Do something here

if __name__ == "__main__":
    logging.basicConfig(level=logging.INFO,
                        format='%(asctime)s - %(message)s',
                        datefmt='%Y-%m-%d %H:%M:%S')
    event_handler = Event()
    observer = Observer()
    observer.schedule(event_handler, my_path, recursive=True)
    observer.start()
    try:
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        observer.stop()
    observer.join()
Run Code Online (Sandbox Code Playgroud)

而且效果很好.但我有另一个脚本与一堆Tkinter小部件(典型的tk应用程序mainloop()).现在,当用户按下某个按钮时,我想调用看门狗监视文件更改,就像之前一样,调用dispatch()它会对它做一堆事情,并在同一个脚本中更新一些tkinter ui小部件,比如progressbars.

这个GUI的东西很新,无法弄清楚如何使看门狗循环和root.mainloop一起工作.怎么做到呢?

python user-interface tkinter python-3.x

1
推荐指数
1
解决办法
594
查看次数