我正在使用 Visual Studio 2008 在 Windows 上构建 Qt 4.5 应用程序。每当我在调试模式下运行应用程序然后关闭它时,Visual Studio 都会将以下内容打印到输出窗格:
检测到内存泄漏!
转储对象 ->
{696512} 位于 0x01981AB0 的正常块,24 字节长。
数据:< > 00 CD CD CD 00 00 00 00 00 00 00 00 00 00 00 00
{696511}正常块位于0x02E59B70,12字节长。
数据:<U2g U2g> B0 1A 98 01 E8 55 32 67 E8 55 32 67
输出报告了数百个这样的块。我在使用 Qt 4 的模型/视图框架时尤其注意到了这一点。Qt 实际上是否存在内存泄漏,或者在某些情况下 Visual Studio 会错误报告泄漏?
我的主窗口具有以下绘图功能:
void MainWindow::paintEvent(QPaintEvent*)
{
QImage sign(50, 50, QImage::Format_ARGB32_Premultiplied);
QPainter p(&sign);
p.setRenderHint(QPainter::Antialiasing, true);
p.fillRect(sign.rect(), QColor(255, 255, 255, 0));
p.setBrush(Qt::blue);
p.setPen(Qt::NoPen);
p.drawEllipse(0, 0, sign.width(), sign.height());
p.end();
QPainter painter(this);
painter.drawImage(rect(), sign, sign.rect());
}
Run Code Online (Sandbox Code Playgroud)
所以基本上,它会在 QImage 上绘制一个蓝色填充圆圈,然后将该 QImage 绘制到小部件上。然而,当我调整窗口大小时,我得到了奇怪的人工制品(在左上角)。它看起来是这样的:
原来的:

更改窗口大小后:

有谁知道这是为什么?
(我正在 Ubuntu 10.04 下工作,如果你感兴趣的话)
我有个问题。
如何在我的项目文件夹中创建一个文件。.QSS?
在创建新文件的选项中没有这个扩展名!
我将非常感谢您的帮助。
谢谢你。
我有一个主对话框,在那个对话框上有一个按钮。单击按钮时,我想打开另一个对话框。
主对话框代码(在主对话框中单击按钮时调用的函数):
def add_host(self):
x=add_host.Ui_Dialog1()
x.main()
Run Code Online (Sandbox Code Playgroud)
默认功能:
if __name__ == "__main__":
import sys
global app
app = QtGui.QApplication(sys.argv)
Dialog = QtGui.QDialog()
ui = Ui_Dialog()
ui.setupUi(Dialog)
Dialog.show()
sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)
辅助对话框(add_host.py)代码快照:
def main(self):
app1 = QtGui.QApplication(sys.argv)
Dialog1 = QtGui.QDialog()
ui1 = Ui_Dialog1()
ui1.setupUi1(Dialog1)
Dialog1.show()
sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)
因此,当我运行代码时,它会打开辅助对话框,但是当我关闭它时,它会冻结,并收到以下错误消息:
File "testbot.py", line 175, in add_host
x.main()
File "/home/ppp/ppp/add_host.py", line 74, in main
sys.exit(app.exec_())
NameError: global name 'app' is not defined
Run Code Online (Sandbox Code Playgroud)
这确实有道理,但我不知道如何解决。我尝试了几种组合都没有成功,包括添加和删除app.exec_().
是否有任何函数可以完成与QString::split()相反的工作。我的意思是我有一个数组或List,我想用QString 胶水添加它们。
我使用 QTextCursor 在 QTextEdit 中插入了几张图片,现在我应该如何保存整个内容?
我的第一个想法是遍历 QTextCursor 的所有位置,但我没有找到合适的界面来使用。
使用中的示例代码:
QTextCursor cursor = ui->textEdit->textCursor();
cursor.insertImage(QImage ("/secure/Common/Pictures/icons/gimp.svg"));
ui->textEdit->setTextCursor(cursor);
QTextDocument *document = ui->textEdit->document();
QStringList images;
QTextBlock b = document->begin();
while (b.isValid()) {
for (QTextBlock::iterator i = b.begin(); !i.atEnd(); ++i) {
QTextCharFormat format = i.fragment().charFormat();
bool isImage = format.isImageFormat();
if (isImage)
{
images << format.toImageFormat().name();
qDebug() << document->resource(QTextDocument::ImageResource,
QUrl(format.toImageFormat().name())).toByteArray().size();
}
}
b = b.next();
}
Run Code Online (Sandbox Code Playgroud) 我试图从树视图中获取字符串/对象。因此,当用户单击树视图中的任何项目时,我可以在终端上显示它。任何帮助表示赞赏。这是代码。当我单击树视图中的字符串/项目时,它会显示: PyQt4.QtCore.QModelIndex object at 0xb6b6c7d4 而不是 Linux
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4 import QtCore, QtGui
data = root = [
("Linux", [
("System",
[("System name",[]),
("Kernel", []),
("Drivers", []),
("Memory", []),
("Processes", []),
("Disk mounted", []),
("Services Running", []),
("Installed Packages", [])]),
#[("System name", [])]),
("Network",
[("Nework confi.",[]),
("Interface test", [])]),
("PCI Devices",
[("PCI devices", [])]),
("Logs",
[("Messages",[]),
("Dmesg", [])]),
])]
class Window(QWidget):
def __init__(self):
QWidget.__init__(self)
self.treeView = QTreeView()
self.model = QStandardItemModel()
self.addItems(self.model, …Run Code Online (Sandbox Code Playgroud) 这是一个非常简单的应用程序来说明我遇到的问题。
#include <QTextStream>
int main()
{
QTextStream cin(stdin);
QTextStream cout(stdout);
QString test;
cout << "Enter a value: ";
cout.flush();
cin >> test;
cout << "Enter another value: ";
cout.flush();
test = cin.readLine();
cout << test;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我希望执行暂停并等待输入test = cin.readline();,但事实并非如此。如果我删除cin >> test;然后它暂停。
为什么这段代码的行为是这样的,我如何获得我想要的行为?
如何也继承 QLabel 和 QPushButtonton,我尝试的显示错误消息
/home/test.cpp:206: error: reference to 'setText' is ambiguous
setText(text);
^
Run Code Online (Sandbox Code Playgroud)
这是我尝试过的:
class virtualLabel: virtual public QLabel
{
Q_OBJECT
public:
explicit virtualLabel(const QString& text="", QWidget* parent=0){}
~virtualLabel(){}
};
class virtualPushButton: virtual public QPushButton
{
Q_OBJECT
public:
explicit virtualPushButton(const QString& text="", QWidget* parent=0){}
~virtualPushButton(){}
};
class customLabel : public virtualLabel, public virtualPushButton
{
Q_OBJECT
// Q_DECLARE_INTERFACE
//Q_INTERFACES(YourInterface OtherInterface)
public:
explicit customLabel(const QString& text="", QWidget* parent=0);
~customLabel();
QString folderName;
};
Run Code Online (Sandbox Code Playgroud)
任何帮助表示感谢谢谢
我有一个带有 matplotlib 和多进程的单独绘图线程。现在,如果我以交互方式放大窗口,则 autoscale_view() 不再起作用(使用 autoscale() 修复)。但是工具箱中的“主页”按钮仍然不起作用:它似乎调用了 autoscale_view() 并且不显示更新的视图而是旧视图(在放大时)。示例代码:
import matplotlib
matplotlib.use("qt4agg")
from matplotlib import pyplot as plt
import multiprocessing
def reset_view():
plt.get
xdata = []
ydata = []
temp = 0
test_ax = plt.gca()
test_line, = plt.plot(xdata, ydata)
plt.show(block=False)
for i in range(10):
temp = temp+1
xdata.append(temp)
ydata.append(temp)
test_line.set_data(xdata, ydata)
test_ax.relim()
test_ax.autoscale(tight= False)
plt.show(block=False)
plt.pause(2)
plot_thread = multiprocessing.Process(target = reset_view, args = ())
reset_view()
if __name__ == '__main__':
plot_thread.start()
Run Code Online (Sandbox Code Playgroud)
尝试在绘图期间放大,然后按主页按钮。有没有办法让主页按钮使用 autoscale() 而不是 autoscale_view() 或重置并更新工具栏历史记录,以便它不会跳回旧视图?
Ps:“主页”-按钮=重置原始视图
qt4 ×10
c++ ×5
qt ×5
pyqt ×3
python ×3
pyqt4 ×2
linux ×1
matplotlib ×1
memory-leaks ×1
qtextstream ×1
toolbar ×1