30/09/2018, 16:36

What is type of this member of class?

Trong Qt em thấy người ta có tạo lớp QDesktopServices, sau khi include nó vào project thì người ta gọi được như thế này:

#include <QDesktopServices>
#include <QUrl>

....
QDesktopServices::openUrl(QUrl("http://google.com.vn/"));

Vậy openUrl của lớp QDesktopServices nó là cái gì? Định nghĩa nó trong class như thế nào?
Chắc chắn nó không phải là function rồi, vì nó có thể được gọi không thông qua đối tượng cụ thể. Vậy em muốn tạo một chức năng tương tự như thế trong class thì làm thế nào? @ltd


À, cái openUrl cụ thể là bool openUrl(const QUrl& url);
Vậy là nó vẫn là hàm, nhưng làm sao để gọi execute được như trên thì em chưa rõ.
Hay là chỉ trong Qt creator mới dùng được như thế

Nguyễn Minh Dũng viết 18:42 ngày 30/09/2018

Em dùng Qt mấy nhỉ, 4x hay 5? Gỉả sử em dùng Qt 4.8 nhé (Qt 5 em search tương tự)

Vậy openUrl của lớp QDesktopServices nó là cái gì?

Đây là định nghĩa của openUrl trên Qt documents.

http://qt-project.org/doc/qt-4.8/qdesktopservices.html#openUrl

ịnh nghĩa nó trong class như thế nào?

Đây là khai báo ở file header: qdesktopservices.h

https://qt.gitorious.org/qt/qt/source/57756e72adf2081137b97f0e689dd16c770d10b1:src/gui/util/qdesktopservices.h#L62

Đây là định nghĩa ở file source: qdesktopservices.cpp

https://qt.gitorious.org/qt/qtbase/source/0c3cfdba45f5e3db430b41649750dc767c93b888:src/gui/util/qdesktopservices.cpp#L176

Chắc chắn nó không phải là function rồi, vì nó có thể được gọi không thông qua đối tượng cụ thể.

Nó là static nên có thể gọi trực tiếp thế này. Google thêm về static trong C++ nhé. Hoặc hỏi ở topic khác ^^

Vậy em muốn tạo một chức năng tương tự như thế trong class thì làm thế nào? @ltd

Đặt từ khóa static phía trước như trong file header ở trên.

Tran Huan viết 18:49 ngày 30/09/2018

, vì nó có thể được gọi không thông qua đối tượng cụ thể. Vậy em muốn tạo một chức năng tương tự như thế trong class thì làm thế nào? @ltd

Nó là static function đó bạn . Bạn không cần phải tạo ra đối tượng của lớp để có thể gọi static function. Còn bạn muốn coi source để xem nó làm như thế nào thì bạn có thể tìm tới file .cpp mà xem, vì nó opensource mà, lúc cài vào sẽ có thêm phần source kèm theo nhé

... viết 18:39 ngày 30/09/2018

Thanks mọi người, em test thử được rồi:

#include <iostream>
#include <string>
using namespace std;

class test  {

public:
    test();
    ~test();

    static void show(const string& s);
private:

};

void test::show(const string& s)    {

    cout << s.c_str() << endl;
}

int main()  {

    test::show(string("String"));
    return 0;
}
Nguyễn Minh Dũng viết 18:47 ngày 30/09/2018

Good job well done

... viết 18:52 ngày 30/09/2018

Ngoài ra kiểu enum khi đặt trong class cũng có thể truy cập không thông qua đối tượng.

#include <iostream>
using namespace std;

class test  {

public:
    enum value { value1, value2, value3 };
    test();
    ~test();

private:

};

int main()  {

    cout << test::value1 << " " << test::value2 << " " << test::value3 << endl;
    return 0;
}
Nguyễn Minh Dũng viết 18:37 ngày 30/09/2018

enum là trường hợp khác rồi em. Nhưng đúng, enum cũng làm được như vậy.

Bài liên quan
0