OK, tôi thực sự đã viết một số mã làm những gì tôi cần. Điều tốt là nó khá dễ dàng trong Qt.
Thông tin xây dựng là ở dưới cùng của bài này.
xclipshow.cpp:
#include <QApplication>
#include <QTimer>
#include <QClipboard>
#include <QMimeData>
#include <QDebug>
#include <QStringList>
class App: public QObject {
Q_OBJECT
private:
void main();
public:
App(): QObject() { }
public slots:
void qtmain() { main(); emit finished(); }
signals:
void finished();
};
void App::main() {
QClipboard *clip = QApplication::clipboard();
for(QString& formatName: clip->mimeData()->formats()) {
std::string s;
s = formatName.toStdString();
QByteArray arr = clip->mimeData()->data(formatName);
printf("name=%s, size=%d: ", s.c_str(), arr.size());
for(int i = 0; i < arr.size(); i++) {
printf("%02x ", (unsigned char) arr.at(i));
}
printf("\n");
}
}
int main(int argc, char **argv) {
QApplication app(argc, argv);
App *task = new App();
QObject::connect(task, SIGNAL(finished()), & app, SLOT(quit()));
QTimer::singleShot(0, task, SLOT(qtmain()));
return app.exec();
}
#include "xclipshow.moc"
CMakeLists.txt:
cmake_minimum_required(VERSION 3.0.0)
project(xclipshow)
find_package(Qt5Widgets)
set(CMAKE_AUTOMOC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(SRC
xclipshow.cpp)
add_definitions(-std=c++11)
add_executable(xclipshow ${SRC})
qt5_use_modules(xclipshow Widgets Core)
Xây dựng thông tin theo yêu cầu trong nhận xét của @slm: tùy thuộc vào hệ thống bạn đang sử dụng. Mã này cần Qt5 và CMake để biên dịch. Nếu bạn có cả hai, tất cả những gì bạn cần làm là chạy:
BUILD_DIR=<path to an empty temporary dir, which will contain the executable file>
SRC_DIR=<path to the directory which contains xclipshow.cpp>
$ cd $BUILD_DIR
$ cmake $SRC_DIR
$ make
hoặc 'gmake' nếu bạn đang sử dụng FreeBSD hoặc 'mingw32-make' nếu bạn đang ở trên Windows, v.v.
Nếu bạn không có Qt5 hoặc CMake, bạn có thể thử thoát khỏi Qt4 và biên dịch thủ công:
$ moc xclipshow.cpp > xclipshow.moc
$ g++ xclipshow.cpp -o xclipshow `pkg-config --cflags --libs QtGui` -I. --std=c++11
Nếu bạn nhận được thông tin về --std=c++11
tùy chọn không hợp lệ , --std=c++0x
thay vào đó hãy thử và xem xét nâng cấp trình biên dịch của bạn;).