小编lie*_*ewl的帖子

附加到QList的QList

我试图在运行时将项附加到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)

c++ qt qlist

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

在Qt拖放中使用QMimeData传递数据

我试图了解在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)

但它没有用,说"无法匹配'运营商>>".我应该怎么做的提示?

c++ qt drag-and-drop mime-types

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

PySide:将数据从QML传递到Python

我正在尝试将数据从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)

python qt pyside qml qtdeclarative

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

使用php将pdf文件转换为txt文件

这个程序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:无法打开共享对象文件:没有这样的文件或目录

似乎服务器上缺少某些东西.

php pdf text-files

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

在Qt中更改标签

我正在尝试制作一个由按钮和标签组成的简单程序.按下按钮时,它应该将标签文本更改为程序内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()的定义来修复它.

c++ qt

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

Qt - 信号槽中的参数

我有一个QPushButton,QDateEdit和另一个自定义对象.我想将按钮连接到日期编辑对象,当我单击按钮时,日期编辑对象将其设置日期更改为自定义对象上定义的日期.有点像:

connect(pushbutton,SIGNAL(clicked()),dateedit,SLOT(setDate(custom_object.getDate())));
Run Code Online (Sandbox Code Playgroud)

但我做不到.显然,connect语句没有指定从信号传递到插槽的信息是什么,只是传递信息的类型.有没有办法在不必创建新类的情况下执行此操作?

qt signals-slots

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

在这个 Python 3 客户端-服务器示例中,客户端无法发送多于一条消息

这是一个简单的客户端-服务器示例,其中服务器返回客户端发送的任何内容,但相反。

服务器:

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] 已建立的连接被主机中的软件中止

我究竟做错了什么?

python sockets client-server python-3.x

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

PHP/MySQL:更新不存在的列值

所以,这个查询:

mysql_query("UPDATE item SET name = 'foo' WHERE name = 'bar'");
Run Code Online (Sandbox Code Playgroud)

返回1,但表中不存在值'bar'.正如预期的那样,数据库本身没有任何变化,但在这种情况下mysql_query()不应该返回0吗?

php mysql

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

简单的C++代码不起作用

这个非常简单的代码给了我很多错误:

#include <iostream>
#include <string>

int main() {
    std::string test = " ";
    std::cout << test;
}
Run Code Online (Sandbox Code Playgroud)

我试着在控制台上输入gcc -o simpletest simpletest.cpp在linux上编译它.我不明白为什么它不起作用.怎么了?

c++ gcc g++

2
推荐指数
4
解决办法
1448
查看次数

Qt Quick 2上的QSplashScreen

我在新的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所需的东西.

qt qt5 qtquick2

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

Qt QString maxsplit 参数

split()Python 字符串有一个可以接受参数的函数maxsplit(来自Python 文档):

如果给出 maxsplit,则最多完成 maxsplit 分割(因此,列表最多有 maxsplit+1 个元素)。如果未指定 maxsplit 或为 -1,则拆分数量没有限制(进行所有可能的拆分)。

QString 可以做到这一点吗?我查看了文档,没有重载需要相当于参数的split()整数。maxsplit

qstring qt

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

QWidget的paintEvent()滞后应用程序

我正在研究和修改冰箱磁铁的例子,我试图做的最后一件事是绘制一些应该在背景上的标签和线条.

在环顾四周试图找出如何绘制标签和线条之后,我了解到我可以覆盖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)

c++ qt infinite-loop qpainter

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