我试图在运行时将项附加到QList,但我正在运行错误消息.基本上我要做的是创建一个QLists的QList,并为每个内部列表添加一些customClass对象.这是我的代码:
widget.h:
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = 0);
~Widget();
public slots:
static QList<QList<customClass> > testlist(){
QList<QList<customClass> > mylist;
for(int w=0 ; w<5 ; w++){
mylist.append(QList<customClass>());
}
for(int z=0 ; z<mylist.size() ; z++){
for(int x=0 ; x<10 ; x++){
customClass co = customClass();
mylist.at(z).append(co);
}
}
return mylist;
}
};
Run Code Online (Sandbox Code Playgroud)
customclass.h:
class customClass
{
public:
customClass(){
this->varInt = 1;
this->varQString = "hello world";
}
int varInt;
QString varQString;
};
Run Code Online (Sandbox Code Playgroud)
main.cpp中:
int main(int argc, char *argv[]) …Run Code Online (Sandbox Code Playgroud) 我试图了解在Qt中使用拖放时数据是如何传递的.根据我从我一直在研究的示例中理解的内容,您首先通过覆盖继承的方法将窗口小部件定义为可拖动QWidget.
在重写方法的实现中,我一直在查看的例子实例化一个指向QMimeData对象的指针,并通过调用setText(const QString &text)和存储信息setData(const QByteArray &data).它们QByteArray与<<操作员一起在对象中存储信息:
QByteArray itemData;
QDataStream dataStream(&itemData, QIODevice::WriteOnly);
dataStream << labelText << QPoint(ev->pos() - rect().topLeft());
QMimeData *mimeData = new QMimeData;
mimeData->setData("application/x-fridgemagnet", itemData);
mimeData->setText(labelText);
Run Code Online (Sandbox Code Playgroud)
在dropEvent()接受drop的小部件中的方法定义中,这两个变量都是由>>运算符检索的:
QString text;
QPoint offset;
dataStream >> text >> offset;
Run Code Online (Sandbox Code Playgroud)
在该setData()方法中,application/x-fridgemagnet作为MIME类型参数传递.那是在其他地方定义的还是它可以弥补的东西?
如何在对象内存储和检索自定义QMimeData对象?我试过这个:
dataStream << labelText << QPoint(ev->pos() - rect().topLeft()) << myObject;
Run Code Online (Sandbox Code Playgroud)
并试图像这样检索它:
myClass myObject;
dataStream >> text >> offset >> myObject;
Run Code Online (Sandbox Code Playgroud)
但它没有用,说"无法匹配'运营商>>".我应该怎么做的提示?
我正在尝试将数据从QML发送到Python,但出现错误。
test.py:
#!/usr/bin/env python
import sys
from PySide import QtCore, QtGui, QtDeclarative
class Test( QtCore.QObject ):
def __init__( self ):
QtCore.QObject.__init__(self)
@QtCore.Slot()
def printText(self,text):
print text
class MainWindow( QtDeclarative.QDeclarativeView ):
def __init__( self, parent=None ):
super( MainWindow, self ).__init__( parent )
self.setWindowTitle( "Test" )
self.setSource( QtCore.QUrl.fromLocalFile( './test.qml' ) )
self.setResizeMode( QtDeclarative.QDeclarativeView.SizeRootObjectToView )
app = QtGui.QApplication( sys.argv )
window = MainWindow()
context = window.rootContext()
context.setContextProperty("testModel",Test())
window.show()
sys.exit( app.exec_() )
Run Code Online (Sandbox Code Playgroud)
test.qml:
import QtQuick 1.0
Rectangle {
width: 200
height: 200
color: "white" …Run Code Online (Sandbox Code Playgroud) 这个程序pdftotext可以将pdf文件转换为文本文件.要在linux控制台上直接使用它:
pdftotext file.pdf
Run Code Online (Sandbox Code Playgroud)
这将在与pdf文件相同的目录中生成file.txt.我正在寻找一种方法来从php程序中完成它,并在一些谷歌搜索后,我结束了两个应该适合我的命令:system()和exec().所以我用这个做了一个php文件:
<?php
system('pdftotext file.pdf');
?>
Run Code Online (Sandbox Code Playgroud)
但是,当我运行此代码时,它不起作用.没有创建txt文件.所以我尝试用另一个命令创建一个测试文件:
<?php
system('touch test.txt');
?>
Run Code Online (Sandbox Code Playgroud)
这很好.我也使用了exec(),结果是一样的.为什么不起作用?
编辑:按照RoBorg的建议,我在命令中添加了2>&1参数,所以:
<?php
system('pdftotext file.pdf 2>&1');
?>
Run Code Online (Sandbox Code Playgroud)
它打印了一条错误消息:
pdftotext:加载共享库时出错:libfontconfig.so.1:无法打开共享对象文件:没有这样的文件或目录
似乎服务器上缺少某些东西.
我正在尝试制作一个由按钮和标签组成的简单程序.按下按钮时,它应该将标签文本更改为程序内QString变量中的任何内容.到目前为止,这是我的代码:
这是我的widget.h文件:
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = 0);
~Widget();
private:
Ui::WidgetClass *ui;
QString test;
private slots:
void myclicked();
};
Run Code Online (Sandbox Code Playgroud)
这是Widget类的实现:
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent), ui(new Ui::WidgetClass)
{
ui->setupUi(this);
test = "hello world";
connect(ui->pushButton, SIGNAL(clicked()), ui->label, SLOT(myclicked()));
}
Widget::~Widget()
{
delete ui;
}
void Widget::myclicked(){
ui->label->setText(test);
}
Run Code Online (Sandbox Code Playgroud)
它运行但单击按钮时没有任何反应.我究竟做错了什么?
编辑:在我使用它之后,标签中的文本大于标签本身,因此文本被剪切了.我通过添加ui->label->adjustSize()myclicked()的定义来修复它.
我有一个QPushButton,QDateEdit和另一个自定义对象.我想将按钮连接到日期编辑对象,当我单击按钮时,日期编辑对象将其设置日期更改为自定义对象上定义的日期.有点像:
connect(pushbutton,SIGNAL(clicked()),dateedit,SLOT(setDate(custom_object.getDate())));
Run Code Online (Sandbox Code Playgroud)
但我做不到.显然,connect语句没有指定从信号传递到插槽的信息是什么,只是传递信息的类型.有没有办法在不必创建新类的情况下执行此操作?
这是一个简单的客户端-服务器示例,其中服务器返回客户端发送的任何内容,但相反。
服务器:
import socketserver
class MyTCPHandler(socketserver.BaseRequestHandler):
def handle(self):
self.data = self.request.recv(1024)
print('RECEIVED: ' + str(self.data))
self.request.sendall(str(self.data)[::-1].encode('utf-8'))
server = socketserver.TCPServer(('localhost', 9999), MyTCPHandler)
server.serve_forever()
Run Code Online (Sandbox Code Playgroud)
客户:
import socket
import threading
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(('localhost',9999))
def readData():
while True:
data = s.recv(1024)
if data:
print('Received: ' + data.decode('utf-8'))
t1 = threading.Thread(target=readData)
t1.start()
def sendData():
while True:
intxt = input()
s.send(intxt.encode('utf-8'))
t2 = threading.Thread(target=sendData)
t2.start()
Run Code Online (Sandbox Code Playgroud)
我从 Google 上找到的示例中获取了服务器,但客户端是从头开始编写的。这个想法是让客户端可以无限期地从服务器发送和接收数据。
与客户端发送第一条消息是可行的。但是当我尝试发送第二条消息时,出现此错误:
ConnectionAbortedError: [WinError 10053] 已建立的连接被主机中的软件中止
我究竟做错了什么?
所以,这个查询:
mysql_query("UPDATE item SET name = 'foo' WHERE name = 'bar'");
Run Code Online (Sandbox Code Playgroud)
返回1,但表中不存在值'bar'.正如预期的那样,数据库本身没有任何变化,但在这种情况下mysql_query()不应该返回0吗?
这个非常简单的代码给了我很多错误:
#include <iostream>
#include <string>
int main() {
std::string test = " ";
std::cout << test;
}
Run Code Online (Sandbox Code Playgroud)
我试着在控制台上输入gcc -o simpletest simpletest.cpp在linux上编译它.我不明白为什么它不起作用.怎么了?
我在新的Qt Quick 2项目上使用QSplashScreen时遇到问题.这是项目'main.cpp':
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QPixmap pix("./test80.png");
QSplashScreen splash(pix);
splash.show();
QTest::qSleep(5000);
splash.hide();
QtQuick2ApplicationViewer viewer;
viewer.setMainQmlFile(QStringLiteral("qml/teste/main.qml"));
viewer.showExpanded();
return app.exec();
}
Run Code Online (Sandbox Code Playgroud)
这段代码编译.当我运行它时,应用程序输出显示以下消息:QWidget: Cannot create a QWidget without QApplication.显然QGuiApplication并没有从QApplication继承,所以我很难过.
编辑:将QGuiApplication更改为QApplication似乎有效,但我担心QApp Quick将缺少Qt Quick 2所需的东西.
split()Python 字符串有一个可以接受参数的函数maxsplit(来自Python 文档):
如果给出 maxsplit,则最多完成 maxsplit 分割(因此,列表最多有 maxsplit+1 个元素)。如果未指定 maxsplit 或为 -1,则拆分数量没有限制(进行所有可能的拆分)。
QString 可以做到这一点吗?我查看了文档,没有重载需要相当于参数的split()整数。maxsplit
我正在研究和修改冰箱磁铁的例子,我试图做的最后一件事是绘制一些应该在背景上的标签和线条.
在环顾四周试图找出如何绘制标签和线条之后,我了解到我可以覆盖QWidget的paintEvent()来实现它.在我做了之后,应用程序变得迟钝,我发现这是因为paintEvent()在一个看似无限的循环中被调用.
试图弄清楚如何解决这个问题,我将标签和行的代码移到了类的构造函数中.虽然只在应用程序上绘制了标签.之后,我将标签留在构造函数中,但将绘制线条的代码移回paintEvent().它工作正常,线条按预期绘制,只有在拖动东西时才调用paintEvent().
为什么没有在构造函数上绘制线条,以及为什么paintEvent()进入无限循环?
这是应该绘制标签和线条的片段:
QPen pen(Qt::lightGray, 0, Qt::SolidLine, Qt::SquareCap, Qt::RoundJoin);
QPainter paint(this);
paint.setPen(pen);
int scale = 20;
for(int x=0; x<25; x++){
QString timetext= "0"+QString::number(x)+":00";
QLabel *time= new QLabel(timetext,this);
time->move(x*scale,2);
time->show();
paint.drawLine(x*scale,12,x*scale,400);
}
Run Code Online (Sandbox Code Playgroud)